Type a variable-argument function? Is it possible to type a variable-argument function?

EDIT: like those defined in Scheme.
Such functions can be typed in dependently typed programming languages (among others).

This is an example in Agda, a dependently typed language that looks similar to Haskell:

more : Nat -&gt; Set
more 0 = Nat
more (S x) = Nat -&gt; more x


sum : \forall {x : Nat} -&gt; Nat -&gt; more x
sum {0}   a = a
sum {S x} a = \lambda m -&gt; sum {x} (m + a)


The function sum takes x natural numbers as arguments and returns with the sum of all arguments. The S in the pattern matches is the "successor" constructor on the natural numbers.

Note: Agda has a much nicer Unicode syntax, but most browsers can't display it correctly.