sig
  type ('a, 'b) t = ('a, 'b) Result.result Lwt.t
  val return : 'a -> ('a, 'b) Lwt_result.t
  val fail : 'b -> ('a, 'b) Lwt_result.t
  val lift : ('a, 'b) Result.result -> ('a, 'b) Lwt_result.t
  val ok : 'a Lwt.t -> ('a, 'b) Lwt_result.t
  val catch : 'a Lwt.t -> ('a, exn) Lwt_result.t
  val get_exn : ('a, exn) Lwt_result.t -> 'a Lwt.t
  val map : ('a -> 'b) -> ('a, 'e) Lwt_result.t -> ('b, 'e) Lwt_result.t
  val map_err :
    ('e1 -> 'e2) -> ('a, 'e1) Lwt_result.t -> ('a, 'e2) Lwt_result.t
  val bind :
    ('a, 'e) Lwt_result.t ->
    ('a -> ('b, 'e) Lwt_result.t) -> ('b, 'e) Lwt_result.t
  val bind_lwt :
    ('a, 'e) Lwt_result.t -> ('a -> 'b Lwt.t) -> ('b, 'e) Lwt_result.t
  val bind_lwt_err :
    ('a, 'e1) Lwt_result.t -> ('e1 -> 'e2 Lwt.t) -> ('a, 'e2) Lwt_result.t
  val bind_result :
    ('a, 'e) Lwt_result.t ->
    ('a -> ('b, 'e) Result.result) -> ('b, 'e) Lwt_result.t
  module Infix :
    sig
      val ( >|= ) :
        ('a, 'e) Lwt_result.t -> ('a -> 'b) -> ('b, 'e) Lwt_result.t
      val ( >>= ) :
        ('a, 'e) Lwt_result.t ->
        ('a -> ('b, 'e) Lwt_result.t) -> ('b, 'e) Lwt_result.t
    end
  val ( >|= ) : ('a, 'e) t -> ('a -> 'b) -> ('b, 'e) t
  val ( >>= ) : ('a, 'e) t -> ('a -> ('b, 'e) t) -> ('b, 'e) t
end