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