Dynamic Types Have Advantages

Static type systems have so many advantages, that's it's easy to lose sight of the cost we pay.

Good ideas should be stolen in both directions. Avoid​Monoculture​Design.

Static Types Are Verbose

Inference is not sufficient in 100% of cases. Clever inference is surprising and scales poorly. Limited inference is verbose.

The World Isn't Well Typed

Important tooling like debuggers, live system migration, and test frameworks need to break type well-formedness.

Gradual Migration is hard

Error messages are often poor

Doing a good job of error reporting is hard, bordering on a research problem. Elm is incredibly good in this space, although it has a simpler type system.

A runtime type error has more information. In addition to the position of the error, it has a full stacktrace, and an example value that broke the invariant!

Footnotes

Sometimes dumb tools are OK. Quick and dirty serialise / deserialise is useful.

Pattern matching can end up looking like type tests.

Sometimes the tools are easier to use, more design iterations happen, and better results emerge (cf Quickcheck and Hypothesis).