functor (M : Monad.Monad->
  sig type 'a f = 'M.m val map : ('-> 'b) -> 'a f -> 'b f end