After visiting again, it make sense for cases where we have chained calls and first one returns invalid type for the function:
returnsFn(arg1)(arg2) // <= all good
returnsNum(arg1)(arg2) // <= here maybe better to delegate the desicion to runtime or later stages at parsing
but cases where we can see that it’s Number or Bool better to be ParseErr
33();
Even though, best case I think would be to detect whatever is possible at parsing stage and rest at runtime, better to stick whatever is preferred way in the book. It’s an exercise.