"Given a function with a single parameter of tuple type 
 `[P1, P2, ..., Pn]`, return a function with multiple 
 parameters of type `P1`, `P2`, ..., `Pn`.
 
 That is, if `fun` has type `W([X,Y,Z])` then `flatten(fun)` 
 has type `W(X,Y,Z)`.
 
 In the case of a function whose parameter type is a 
 sequence type or unterminated tuple type, the returned 
 function is variadic:
 
 - if the given function accepts `[S*]`, the returned 
   function has a single variadic parameter of type `S*`,
 - if the given function accepts `[S+]`, the returned 
   function has a single variadic parameter of type `S+`,
 - if the given function accepts `[P1, P2, ..., Pn, S*]`, 
   the returned function has multiple parameters with types
   `P1`, `P2`, ..., `Pn`, `S*`, or
 - if the given function accepts `[P1, P2, ..., Pn, S+]`,
   the returned function has multiple parameters with types
   `P1`, `P2`, ..., `Pn`, `S+`."
see(`function unflatten`)
tagged("Functions")
shared native Return(*Args) flatten<Return,Args>
        (Return tupleFunction(Args tuple))
        given Args satisfies Anything[];