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