profunctor monad