signature S = sig type t val z : t val s : t -> t end signature T = sig type t val three : t end signature F = functor (M : S) : T structure F = functor (M : S) : T => struct type t = M.t val three = M.s (M.s (M.s M.z)) end structure F2 : F = F