To play nicely with java 8 we need an interface that defines 1 method.
that way we can pass a lambda to map, flatmap etc