def METHOD_NAME(base: Ty, exponent: Ty, left=True) -> Function:
    """
    The evaluation function,
    i.e. take a function and apply it to an argument.
    Parameters:
        base : The output type.
        exponent : The input type.
        left : Whether to take the function on the left or right.
    """
    if left:
        dom, cod = Function.exp(base, exponent) + exponent, base
        return Function(lambda f, *xs: f(*xs), dom, cod)
    dom, cod = exponent + Function.exp(base, exponent), base
    return Function(lambda *xs: xs[-1](*xs[:-1]), dom, cod)