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