sig
  type ('a, 'b) t = ('a, 'b) Result.result Lwt.t
  val return : '-> ('a, 'b) Lwt_result.t
  val fail : '-> ('a, 'b) Lwt_result.t
  val lift : ('a, 'b) Result.result -> ('a, 'b) Lwt_result.t
  val ok : 'Lwt.t -> ('a, 'b) Lwt_result.t
  val catch : 'Lwt.t -> ('a, exn) Lwt_result.t
  val get_exn : ('a, exn) Lwt_result.t -> 'Lwt.t
  val map : ('-> '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 ->
    ('-> ('b, 'e) Lwt_result.t) -> ('b, 'e) Lwt_result.t
  val bind_lwt :
    ('a, 'e) Lwt_result.t -> ('-> '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 ->
    ('-> ('b, 'e) Result.result) -> ('b, 'e) Lwt_result.t
  module Infix :
    sig
      val ( >|= ) :
        ('a, 'e) Lwt_result.t -> ('-> 'b) -> ('b, 'e) Lwt_result.t
      val ( >>= ) :
        ('a, 'e) Lwt_result.t ->
        ('-> ('b, 'e) Lwt_result.t) -> ('b, 'e) Lwt_result.t
    end
  val ( >|= ) : ('a, 'e) t -> ('-> 'b) -> ('b, 'e) t
  val ( >>= ) : ('a, 'e) t -> ('-> ('b, 'e) t) -> ('b, 'e) t
end