functor (Mutex : Mutex.Mutex_t->
  sig
    type condition
    val create : unit -> Duppy.Monad.Condition.Factory.condition
    val wait :
      Duppy.Monad.Condition.Factory.condition ->
      Mutex.mutex -> (unit, 'a) Duppy.Monad.t
    val broadcast :
      Duppy.Monad.Condition.Factory.condition -> (unit, 'a) Duppy.Monad.t
    val signal :
      Duppy.Monad.Condition.Factory.condition -> (unit, 'a) Duppy.Monad.t
  end