`sig
type 'a stm
val return : 'a -> 'a Stm.stm
val bind : 'a Stm.stm -> ('a -> 'b Stm.stm) -> 'b Stm.stm
val ( >>= ) : 'a Stm.stm -> ('a -> 'b Stm.stm) -> 'b Stm.stm
val ( >> ) : 'a Stm.stm -> 'b Stm.stm -> 'b Stm.stm
val abort : 'a Stm.stm
val retry : 'a Stm.stm
val retry_now : 'a Stm.stm
val wait : unit Stm.stm
val or_else : 'a Stm.stm -> 'a Stm.stm -> 'a Stm.stm
val catch : 'a Stm.stm -> (exn -> 'a Stm.stm) -> 'a Stm.stm
val atom_once : 'a Stm.stm -> 'a option
val atom : 'a Stm.stm -> 'a
type 'a tvar
val tvar : 'a -> 'a Stm.tvar
val new_tvar : 'a -> 'a Stm.tvar Stm.stm
val read_tvar : 'a Stm.tvar -> 'a Stm.stm
val write_tvar : 'a Stm.tvar -> 'a -> unit Stm.stm
end`