Type-checking is just one static verification tool. Arity, numeric overflow, array bounds and null errors can also be verified statically.
miniblog.
Related Posts
I'm working on arity errors in Garden, my toy programming language.
Rather than just saying "expected 3, got 4 arguments", I'm trying to report where the extra argument is, or what extra argument was expected.
I tend to favour explicit numbers of arguments in functions: I rarely find auto-currying a useful default. Explicit arity gives good errors!
I've realised that auto-currying allows you to handle generic functions though. `a -> b` can be any function!
Lovely post exploring the expressivity of concatenative PLs when you constrain function arity
https://suhr.github.io/obsc/ (spoiler: it's pretty)

