| > finding the "joy" of dynamically typed languages and all the "freedom" they give you ... verifying those types at compile-time was actually pretty useful Indeed one of the "joys" is that one can apply that verification a la carte, and possibly with different approaches [0][1]. Similarly, one may desire to dispatch on type [2], but might sometimes want arbitrary dispatch [3]. > After writing the 10,000th unit test that only exists to ensure that you spelled some function/method/hash-key correctly This too is solvable with a la carte tooling [4]. Everything has trade-offs. Static type systems give a fixed set of benefits with a fixed set of costs. Some folks prefer to use their experience and judgement to choose when, where, and how to pay the associated costs (and that freedom of choice itself has a cost). It's okay to have different preferences. [0] https://github.com/plumatic/schema [1] https://clojure.org/guides/spec#_entity_maps [2] https://clojure.org/reference/protocols [3] https://clojure.org/reference/multimethods [4] https://clojure.org/guides/spec#_testing |