Curried functions are important for functional programming ergonomics. Polymorphic functions are import for expressiveness, truthfulness, and consequently re-use.
- Pure functional language such as Haskell, PureScript, and Elm offer all of the benefits.
- Languages which admit mutation but which honor soundness (F#, OCaml, and ReScript)
- F# throws a descriptive error message at the location of the offense.
- ReScript throws a halfway descriptive message but errors the entire module.
- OCaml monomorphicizes the application based on the first observed subsequent usage.
- TypeScript, on the other hand, simply allows an unsound typing (which is likely to work out most of the time but will bite you on edge cases).