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