sig
  module Ok :
    sig
      type ('a, 'b) monad = ('a, 'b) 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
  module Error :
    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
end