It's a false dichotomy. If you defer type-checking to runtime, you have a traditional dynamically typed language. Haskell has this in the form of -fdefer-type-errors, but I'd like to see this feature given more emphasis and used in other languages.
In heard OCaml has a quick reloads in some scenarios, but I never tried.
Though they miss out heavily in the typing strength. If only it had Result/Either/Maybe types in the std lib from day 1, and proper sum types with some pattern matching switch statement, that would have made the language soooooo much better.
I find Elm also has good compile times. Maybe polymorphism and/or type-classes are what is hard to optimize.