functor (S : TYPEWRAPPER->
  sig
    type 'a t
    val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
    val ( >> ) : 'a t -> 'b t -> 'b t
    val return : '-> 'a t
    val run : 'a t -> 'a
    val read_state : S.t t
    val write_state : S.t -> unit t
    val run_with : 'a t -> S.t -> 'a
  end