functor (Shape : Shape) (Data : sig type t val structure : t Shape.structure end) -> sig val mem : 'a Shape.k -> bool val get : 'a Shape.k -> (Data.t -> 'a) option val set : 'a Shape.k -> 'a -> Data.t -> Data.t end