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