sig
  type ('a, 'b) monad = ('b, 'a) Core.Std.Result.t
  val ( >>= ) : ('a, 'b) monad -> ('a -> ('c, 'b) monad) -> ('c, 'b) monad
  val ( >>| ) : ('a, 'b) monad -> ('a -> 'c) -> ('c, 'b) monad
  module Monad_infix :
    sig
      type ('a, 'b) monad = ('a, 'b) monad
      val ( >>= ) :
        ('a, 'b) monad -> ('a -> ('c, 'b) monad) -> ('c, 'b) monad
      val ( >>| ) : ('a, 'b) monad -> ('a -> 'c) -> ('c, 'b) monad
    end
  val bind : ('a, 'b) monad -> ('a -> ('c, 'b) monad) -> ('c, 'b) monad
  val return : 'a -> ('a, 'b) monad
  val map : ('a, 'b) monad -> f:('a -> 'c) -> ('c, 'b) monad
  val join : (('a, 'b) monad, 'b) monad -> ('a, 'b) monad
  val ignore : ('a, 'b) monad -> (unit, 'b) monad
end