* “many other type systems” in static languages. Julia is not a statically typed language. If you want every function call to be checked statically, you maybe don’t want a dynamically typed language at all. Which is fine!
For discussion of this kind of thing in Julia, see also Towards typed lambdas by carnaval · Pull Request #10269 · JuliaLang/julia · GitHub and @JeffBezanson’s thesis discussion of arrow types in chapter 4.
See also the many past discussions of things like Why doesn't Julia allow multiple inheritance? - #4 by andyferris and Interfaces for Abstract Types · Issue #6975 · JuliaLang/julia · GitHub