4 ms·
> 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 req
by tome 3y ago
> 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.
- crote 3y agoI 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...
- tome 3y agoInteresting 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).