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