[Haskell-cafe] Most Important GHC extensions to learn/use?

Jonathan Geddes geddes.jonathan at gmail.com
Fri Jun 1 06:45:07 CEST 2012


Thanks, Wren, I really appreciate the detailed response! Though I am
surprised that Template Haskell isn't on your list. From the little I know
of TH it seems like all of the interesting generic/generative stuff is done
with TH. Do the other extensions subsume the need for TH, or is it just not
terribly interesting?

--J Arthur

On Thu, May 31, 2012 at 10:29 PM, wren ng thornton <wren at freegeek.org>wrote:

> On 5/31/12 7:15 PM, Jonathan Geddes wrote:
>
>> Haskell Hackers,
>>
>> I'm pretty comfortable with all of Haskell 98 (and 2010, really). But I've
>> always sort of avoided extensions. I realize that this is a bit silly and
>> if I want to continue learning, it probably means delving into the
>> extensions. Which ones are the most important to know from a practical
>> point of view? And which ones from a {Language,Category,Math}-**
>> theoretical
>> point of view? (Any other interesting/important points of view I'm
>> missing?
>> :D )
>>
>
> There are a bunch which are mostly just syntax changes. The important ones
> are:
>
>    ForeignFunctionInterface (aka FFI)
>        Not technically part of H98, though it was a quick addition. It
>        is part of H2010, so it's not really an "extension" anymore.
>
>    ScopedTypeVariables
>        This one's really easy, and in the cases where you want it you
>        really really want it.
>
>    KindSignatures
>        This one's simple, and it helps expose you to the idea of
>        kinds, which is helpful for what's to come.
>
>    TypeOperators
>        This one's trivial, but it makes things a bit prettier.
>
>    FlexibleContexts, FlexibleInstances
>        These are essential for actually using MPTCs (described below).
>        IMO they should be enabled automatically whenever MPTCs are on.
>
> And there are also a bunch of ones about extending the "deriving" mechanic
> to work with new classes or with newtypes.
>
>
> Then there are the ones that actually change the language in a significant
> way. I'd say the critical ones to learn are:
>
>    RankNTypes (or Rank2Types if you're squeamish)
>        This is used in lots of nice tricks like list fusion. Learning
>        list fusion is a good place for the H98 veteran to explore
>        next, since it's easy to pick up and has many applications
>        outside of just doing list fusion. Also, it's been around
>        forever and isn't going anywhere anytime soon.
>
>    MultiParamTypeClasses (aka MPTCs)
>        This has been around forever, and is considered "standard
>        Haskell" by most people, even though it hasn't made it into the
>        Report yet (due the the fundeps vs TFs issue).
>
>    FunctionalDependencies (aka fundeps)
>        This is helpful for making certain MPTCs usable without too
>        many type signatures. Also, it's good for understanding the
>        fundeps vs TFs issue. Also, this one has been around forever,
>        and although it's fallen into disfavor it is still
>        indispensable due to limitations in TFs.
>
>    TypeFamilies (aka TFs)
>        These are really nifty and they're all the rage these days. In
>        a formal sense they're equivalent to fundeps, but in practice
>        they're weaker than fundeps.
>
>    GADTs
>        These are really nifty and they're all the rage these days.
>        Though beware, GADTs are a rabbit hole leading off to the world
>        of dependent types. You should be aware of the basic ideas
>        here, though don't worry too much about the theory (unless you
>        want to spend a lot of time worrying about the theory).
>
> --
> Live well,
> ~wren
>
> ______________________________**_________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/**mailman/listinfo/haskell-cafe<http://www.haskell.org/mailman/listinfo/haskell-cafe>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120531/19d854d6/attachment.htm>


More information about the Haskell-Cafe mailing list