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