sig
  type 'a monad
  val ( >>= ) :
    'a Monad.Infix.monad ->
    ('a -> 'b Monad.Infix.monad) -> 'b Monad.Infix.monad
  val ( >>| ) : 'a Monad.Infix.monad -> ('a -> 'b) -> 'b Monad.Infix.monad
end