functor (T : sig type s end->   sig     type 'a t = T.s -> 'a * T.s     val return : '-> 'a t     val bind : 'a t -> ('-> 'b t) -> 'b t     val get : '-> 'a * 'a     val put : '-> '-> unit * 'a   end