Clojure vs. The Static Typing World
The thing about static typing is that there&#x27;s a lot of research behind it and it&#x27;s getting better every day.  <i>Eventually</i> it will get to the point where it&#x27;s nearly almost the same as dynamically typed systems, but with type checking (but today is definitely not that day).  Checkout liquid types [1].  It&#x27;s a way to get type inference with nearly dependent types.  Cool stuff.<p>Dynamically typed languages, on the other hand, don&#x27;t really have that much more research that can even be done with them.  Can&#x27;t do any more research on the type system because there isn&#x27;t much of one.  Really the only thing you can do is introduce language features that are difficult to type in a static system, but at that point you&#x27;re just giving more theory CS phd students targets of things to find a novel way to type.<p>That being said, the problem with static type systems is that there is a lot of details that you need to figure out to A) be able to use it and B) be able to avoid the edge cases.  You&#x27;ll eventually need to learn about type theory ... which isn&#x27;t just one thing.  Agda and Idris have incompatible definitions of equality and that has an impact.  Are your dependent types intensional or extensional?  It matters.  And that&#x27;s just the theory side.  Two different type systems with the same theory might have different implementation details that impact the programmer.  Are you using ML?  Is that an applicative functor or a generative functor?  Hey, you&#x27;re using first class modules, cool.  Btw you can&#x27;t use that with applicative functors, don&#x27;t ask why it has something to do with complicated type theory stuff that took people years to figure out.  Using haskell?  Is it GHC or is it some alternative ... because that impacts some type class definitions that are possible.<p><i>Eventually</i> the static types are going to win because we&#x27;ll slowly figure out how to type <i>everything</i> (well, nearly everything) and we&#x27;ll slowly figure out how to package that power in a way that <i>everybody</i> can understand.<p>However, in the mean time there is a very real cost to having to learn any given static type system that doesn&#x27;t exist if you live in a dynamically typed system.  Additionally, if you do understand some type theory you can bring over the lessons learned to your dynamic system.  You won&#x27;t get type checks at compile time, but you will get a more disciplined way to produce code.<p>[1] - <a href="http:&#x2F;&#x2F;citeseerx.ist.psu.edu&#x2F;viewdoc&#x2F;download;jsessionid=029D52B462162562BA423FE3B7A3A37B?doi=10.1.1.205.2089&amp;rep=rep1&amp;type=pdf" rel="nofollow">http:&#x2F;&#x2F;citeseerx.ist.psu.edu&#x2F;viewdoc&#x2F;download;jsessionid=029...</a>