$arrpsz is not a function. It is a function-like construct for constructing arrays.
In ATS, identifiers beginning with the $ symbol often represent constructs that
are function-like. For example, $list, $list_vt, $tuple, $tuple_vt, $raise, etc.
$arrpsz{T}(...) gives you a value of the type arrayptrsize(T, N), where N is the
number of arguments.
>>How do I create a function that takes variable number of arguments of same type ?
Say this function is called foo.
Then you can give foo the following interface:
fun foo{n:int} (arrayptrsize (T, n)): ...
A call to foo is like: foo($arrpsz{T}(...))