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