sig
  module type Mutex_control =
    sig
      type priority
      val scheduler :
        Duppy.Monad.Mutex.Mutex_control.priority Duppy.scheduler
      val priority : Duppy.Monad.Mutex.Mutex_control.priority
    end
  module type Mutex_t =
    sig
      type mutex
      module Control : Mutex_control
      val create : unit -> Duppy.Monad.Mutex.Mutex_t.mutex
      val lock : Duppy.Monad.Mutex.Mutex_t.mutex -> (unit, 'a) Duppy.Monad.t
      val try_lock :
        Duppy.Monad.Mutex.Mutex_t.mutex -> (bool, 'a) Duppy.Monad.t
      val unlock :
        Duppy.Monad.Mutex.Mutex_t.mutex -> (unit, 'a) Duppy.Monad.t
    end
  module Factory : functor (Control : Mutex_control-> Mutex_t
end