    "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)`."
    see(`function unflatten`)
    shared native Callable<Return,Args> flatten<Return,Args>(Return tupleFunction(Args tuple))
            given Args satisfies Anything[];

    "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])`."
    see(`function flatten`)
    shared native Return unflatten<Return,Args>(Callable<Return,Args> flatFunction)(Args args)
            given Args satisfies Anything[];