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