functor (T : sig type t end->
  sig type t = T.t -> T.t val append : t -> t -> t val zero : t end