Worst practices should be hard (2016)
I think analyzing languages through the lens of incentives (&quot;what is this language pushing me towards&#x2F;away from?&quot;) is a great idea. But if Haskell&#x27;s incentives make it well-suited for programming in the large, why is it so rare to see large companies using Haskell?<p>One explanation is: maybe Haskell is great for programming in the large, but is not very &quot;accessible&quot; to the average programmer. That is, as long as your team is competent, you can build really large, long-lived projects in Haskell more effectively than in most languages. However, if your languages requires an above-average level of competence, can you really claim that it&#x27;s suited for &quot;programming in the large?&quot; To me, &quot;PITL&quot; means maintaining a huge codebase across decades, with dozens or hundreds of programmers coming and going. I&#x27;m also inclined to discount this explanation because the Haskell community often claims that Haskell isn&#x27;t really that difficult to learn.<p>Another possible explanation is that people just haven&#x27;t realized that Haskell is a great PITL language yet. But Haskell has been around for quite a while now; why didn&#x27;t it take this long for C++ or Java or Go or Rust to become mainstream PITL languages?<p>I think the real reason is that Haskell actually <i>isn&#x27;t</i> a great PITL language. Clearly it checks some of the most important boxes: type-safety, non-nullability, immutability, etc. But these are outweighed by other aspects -- most significantly, the &quot;excessive abstraction&quot; mentioned by the author. As admitted in the article, &quot;abstraction is too fun!&quot; Haskell&#x27;s powerful type system, operator overloading, language extensions, etc. are all double-edged swords in this way, and in terms of PITL their costs far, far outweigh their benefits.<p>I&#x27;d really like to see more languages that make PITL their top priority. Focusing on &quot;safety&quot; or &quot;robustness&quot; is too narrow-minded; PITL affects almost every aspect of a language: the syntax, the type system, the tooling, even the compilation speed! AFAIK, Go is the only modern language to make PITL their &quot;north star,&quot; and it has succeeded quite well -- but there&#x27;s certainly still a lot about Go that could be improved. I think we&#x27;ll see more &quot;PITL-first&quot; languages in the near future, probably incorporating ideas from Go, Haskell, Rust, and others.