either monad using type lambdas
function functor