sig
  type 'a t
  val create : 'a -> 'a Lwt_mvar.t
  val create_empty : unit -> 'a Lwt_mvar.t
  val put : 'a Lwt_mvar.t -> 'a -> unit Lwt.t
  val take : 'a Lwt_mvar.t -> 'a Lwt.t
end