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