Effective Programs: 10 Years of Clojure
I found the discussion on &#x2F;r&#x2F;haskell to be much pleasant and a good take on the points Hickey make <a href="https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;haskell&#x2F;comments&#x2F;792nl4&#x2F;clojure_vs_the_static_typing_world_haskell_in&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.reddit.com&#x2F;r&#x2F;haskell&#x2F;comments&#x2F;792nl4&#x2F;clojure_vs_...</a> (it&#x27;s actually a discussion on a piece discussing his talk).<p>I honestly don&#x27;t find Hickeys arguments to be very valid, and his take on type systems honestly make him sound like he never touched something like Haskell (maybe OCaml) with much more powerful type systems and type inference. He does not sound like someone that invented a language, and more sounds like a blind evangelist for dynamic typing.<p>&gt; static type systems yield much more heavily coupled systems. And that a big part of that time aspect of the final diagram of what problem we&#x27;re trying to solve, is dominated by coupling when you&#x27;re trying to do maintenance, right? Flowing type information is a major source of coupling in programs. Having a de-, you know, pattern matching of a structural representation in a hundred places in your program is coupling, right?<p>His arguments about coupling seems silly to me, especially since in FP you usually like generalisations and abstractions that allow you to delay specialising to a specific type until quite late. Take all the different typeclasses that exist in Haskell and things like Monads, Applicatives etc that allow such general abstraction.<p>&gt; Names dominate semantics, a to a, list of a to list of a [talking about  `foobar :: [a] -&gt; [a]`], it means nothing, it tells you nothing<p>It tells so much! It tells us that it takes in a list of any element and the only operations it can perform are something that alters the structure of the list (replicate elements, drop elements etc) and no operations on the elements themselves!<p>&gt; How many people like UML? How many people have ever used a UML diagramming tool? Right? It&#x27;s not fun, right? It&#x27;s like, &quot;no, you can&#x27;t connect that to that&quot;, &quot;oh no, you have to use that kind of arrow&quot;, &quot;no, you can&#x27;t do this&quot;, &quot;no, you can&#x27;t...&quot;, it&#x27;s terrible. OmniGraffle is much better, draw whatever you want. What are you thinking about? Draw that. What&#x27;s important? Write that down. That&#x27;s how it should work, right?<p>I chuckled a bit here, since Hickey just talked about Simon Peyton Jones in the previous slide, I&#x27;m assuming he at least Haskell in mind somewhat. If Hickey is seriously comparing Haskell&#x27;s type system with UML, he needs to go back and take another serious look at Haskell.<p>&gt; Yes, IntelliSense is much helped by static types and performance optimization, which he didn&#x27;t list, but I think is one of the biggest benefits. We loved that in C++. And maintenance, I think it&#x27;s not true. I think that they&#x27;ve created problems that they now use types to solve. Oh, I pattern-matched this thing 500 places and I want to add another thing in the middle. Well thank goodness I have types to find those 500 places. But the fact was that thing I added, nobody should have cared about except the new code that consumed it and if I did that a different way I wouldn&#x27;t have had to change anything except the producer and the consumer, not everybody else who couldn&#x27;t possibly know about it, right? It&#x27;s new.<p>Honestly this just comes off incredibly stupid and Hickey quite clearly shows he&#x27;s never programmed in a language with a type system more powerful than C++ or the likes. One of THE BIGGEST advantages of a powerful system is exactly maintenance. He makes the straw man that you have to pattern match every place you lead a type through in your code base, and that you can&#x27;t &quot;not care&quot; about certain parts of the constructor, but that is just so incorrect. He was half onto the point of, with the compiler telling you all the places you&#x27;d have to refactor thought. And that IntelliSense is the only thing he seems to come up with as valid arguments for types...I think that says more about his understanding of types than anything.<p>I&#x27;m gonna leave the rest of the comments up to the discussion I posted in the top, else I would just be rehashing it.