sig type 'a t val init : 'a option -> 'a Semaphore.t val signal : 'a Semaphore.t -> 'a -> unit val wait : 'a Semaphore.t -> 'a val get : 'a Semaphore.t -> 'a option val look : 'a Semaphore.t -> 'a option end