123456789101112131415161718192021222324252627282930313233moduletypeOps=sigtype'attype('x,'fn)fnvalis_empty:('x,'at->bool)fn(** [is_empty mv] determines whether the synchronizing variable [mv] contains
a value or not. *)valput:('x,'at->'a->unit)fn(** [put mv x] fills the synchronizing variable [mv] with the value [v] or
blocks until the variable becomes empty. *)valtry_put:('x,'at->'a->bool)fn(** [try_put mv x] tries to fill the synchronizing variable [mv] with the
value [v] and returns [true] on success or [false] in case the variable is
full. *)valtake:('x,'at->'a)fn(** [take mv] removes and returns the current value of the synchronizing
variable [mv] or blocks waiting until the variable is filled. *)valtake_opt:('x,'at->'aoption)fn(** [take_opt mv] removes and returns the current value of the synchronizing
variable [mv] or returns [None] in case the variable is empty. *)valpeek:('x,'at->'a)fn(** [peek mv] returns the current value of the synchronizing variable [mv] or
blocks waiting until the variable is filled. *)valpeek_opt:('x,'at->'aoption)fn(** [peek_opt mv] returns the current value of the synchronizing variable [mv]
or returns [None] in case the variable is empty. *)end