sig
  type 'a m = 'a Lwt.t
  val return : 'a -> 'a Lwt.t
  val bind : ('a -> 'b Lwt.t) -> 'a Lwt.t -> 'b Lwt.t
  val bind_rev : 'a Lwt.t -> ('a -> 'b Lwt.t) -> 'b Lwt.t
  val error : exn -> 'a Lwt.t
  val catch : (unit -> 'a Lwt.t) -> (exn -> 'a Lwt.t) -> 'a Lwt.t
end