sig
  type 'a monad
  val ( >>= ) : 'a monad -> ('-> 'b monad) -> 'b monad
  val ( >>| ) : 'a monad -> ('-> 'b) -> 'b monad
  module Monad_infix :
    sig
      type 'a monad = 'a monad
      val ( >>= ) : 'a monad -> ('-> 'b monad) -> 'b monad
      val ( >>| ) : 'a monad -> ('-> 'b) -> 'b monad
    end
  val bind : 'a monad -> ('-> 'b monad) -> 'b monad
  val return : '-> 'a monad
  val map : 'a monad -> f:('-> 'b) -> 'b monad
  val join : 'a monad monad -> 'a monad
  val ignore : 'a monad -> unit monad
end