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