Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Haskell committee did a fine job as well

  > After the release of Miranda by Research Software Ltd. in 1985, interest in lazy functional languages grew. By 1987, more than a dozen non-strict, purely functional programming languages existed. Miranda was the most widely used, but it was proprietary software. At the conference on Functional Programming Languages and Computer Architecture (FPCA '87) in Portland, Oregon, there was a strong consensus that a committee be formed to define an open standard for such languages. The committee's purpose was to consolidate existing functional languages into a common one to serve as a basis for future research in functional-language design. [...]
https://en.wikipedia.org/wiki/Haskell#History


I don't think Haskell is a good example.

In my experience, real-world Haskell requires enabling half a dozen language extensions, most of which have only been implemented for GHC and some of which are mutually incompatible.

Over the years Haskell has evolved from a well-defined language into "anything people managed to get merged into Haskell". Learning it is now an absolute nightmare as you are basically required to understand a dozen poorly-documented extensions to use even very basic libraries.


> some of which are mutually incompatible

I don't know of any. Could you please name some?

> Learning it is now an absolute nightmare as you are basically required to understand a dozen poorly-documented extensions to use even very basic libraries

Many extensions make Haskell easier to learn since they remove unnecessary restrictions imposed by the standard.


I haven't used Haskell in a few years, but back then one which really bit me was DeriveAnyClass (introduced in 7.10.1) and GeneralizedNewtypeDeriving (introduced in 6.8.1).

Until the introduction of DerivingVia in 8.6.1 it was impossible to tell Haskell which deriving strategy to use - which is extremely annoying when one library requires the one, another library requires the other, and due to issues with orphan instances you have to use them in the same file.

> Many extensions make Haskell easier to learn since they remove unnecessary restrictions imposed by the standard.

I completely agree, and Haskell 2010 is obviously lacking. Unfortunately, there are also a lot of extensions which people have abused to their fullest extent to create completely unreadable code.

Things like UnicodeSyntax and all the syntax overloading are heavily overused, and you simply can't expect a beginner to immediately grok phrases like "if OverloadedLabels and MagicHash are both enabled then x#y means x# y, but if only OverloadedLabels is enabled then it means x #y".

And of course there's the whole cuckoo's egg of Template Haskell just waiting to blow up in your face...


Interesting examples, thanks!

I have to nitpick a bit though. You said "real-world Haskell requires enabling half a dozen language extensions ... some of which are mutually incompatible". 8.6.1 is 5 years old at this point, so the conflict between DeriveAnyClass and GeneralizedNewtypeDeriving is hardly a pertinent example. The conflict between OverloadedLabels and MagicHash is even less of an example, because the average real world Haskeller never uses MagicHash (and rarely OverloadedLabels: I've never used it once in 10 years of professional real world Haskelling).




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: