functor (T : sig type t end) -> sig type t = T.t list type data = T.t val init : t val f : t -> data -> t end