functor (T : TYPE->
  sig type t = T.t val wrap : t -> encap val unwrap : encap -> t end