sig
  type +'a m
  val return : '-> 'Monad.Monad.m
  val fail : string -> 'Monad.Monad.m
  val ( >>= ) :
    'Monad.Monad.m -> ('-> 'Monad.Monad.m) -> 'Monad.Monad.m
  val ( >> ) : 'Monad.Monad.m -> 'Monad.Monad.m -> 'Monad.Monad.m
end