functor (T : REPR-> sig type t = T.t val repr : t TI.repr end