Thanks, Wren, I really appreciate the detailed response! Though I am surprised that Template Haskell isn&#39;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? <div>
<br></div><div>--J Arthur<br><br><div class="gmail_quote">On Thu, May 31, 2012 at 10:29 PM, wren ng thornton <span dir="ltr">&lt;<a href="mailto:wren@freegeek.org" target="_blank">wren@freegeek.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 5/31/12 7:15 PM, Jonathan Geddes wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Haskell Hackers,<br>
<br>
I&#39;m pretty comfortable with all of Haskell 98 (and 2010, really). But I&#39;ve<br>
always sort of avoided extensions. I realize that this is a bit silly and<br>
if I want to continue learning, it probably means delving into the<br>
extensions. Which ones are the most important to know from a practical<br>
point of view? And which ones from a {Language,Category,Math}-<u></u>theoretical<br>
point of view? (Any other interesting/important points of view I&#39;m missing?<br>
:D )<br>
</blockquote>
<br></div>
There are a bunch which are mostly just syntax changes. The important ones are:<br>
<br>
    ForeignFunctionInterface (aka FFI)<br>
        Not technically part of H98, though it was a quick addition. It<br>
        is part of H2010, so it&#39;s not really an &quot;extension&quot; anymore.<br>
<br>
    ScopedTypeVariables<br>
        This one&#39;s really easy, and in the cases where you want it you<br>
        really really want it.<br>
<br>
    KindSignatures<br>
        This one&#39;s simple, and it helps expose you to the idea of<br>
        kinds, which is helpful for what&#39;s to come.<br>
<br>
    TypeOperators<br>
        This one&#39;s trivial, but it makes things a bit prettier.<br>
<br>
    FlexibleContexts, FlexibleInstances<br>
        These are essential for actually using MPTCs (described below).<br>
        IMO they should be enabled automatically whenever MPTCs are on.<br>
<br>
And there are also a bunch of ones about extending the &quot;deriving&quot; mechanic to work with new classes or with newtypes.<br>
<br>
<br>
Then there are the ones that actually change the language in a significant way. I&#39;d say the critical ones to learn are:<br>
<br>
    RankNTypes (or Rank2Types if you&#39;re squeamish)<br>
        This is used in lots of nice tricks like list fusion. Learning<br>
        list fusion is a good place for the H98 veteran to explore<br>
        next, since it&#39;s easy to pick up and has many applications<br>
        outside of just doing list fusion. Also, it&#39;s been around<br>
        forever and isn&#39;t going anywhere anytime soon.<br>
<br>
    MultiParamTypeClasses (aka MPTCs)<br>
        This has been around forever, and is considered &quot;standard<br>
        Haskell&quot; by most people, even though it hasn&#39;t made it into the<br>
        Report yet (due the the fundeps vs TFs issue).<br>
<br>
    FunctionalDependencies (aka fundeps)<br>
        This is helpful for making certain MPTCs usable without too<br>
        many type signatures. Also, it&#39;s good for understanding the<br>
        fundeps vs TFs issue. Also, this one has been around forever,<br>
        and although it&#39;s fallen into disfavor it is still<br>
        indispensable due to limitations in TFs.<br>
<br>
    TypeFamilies (aka TFs)<br>
        These are really nifty and they&#39;re all the rage these days. In<br>
        a formal sense they&#39;re equivalent to fundeps, but in practice<br>
        they&#39;re weaker than fundeps.<br>
<br>
    GADTs<br>
        These are really nifty and they&#39;re all the rage these days.<br>
        Though beware, GADTs are a rabbit hole leading off to the world<br>
        of dependent types. You should be aware of the basic ideas<br>
        here, though don&#39;t worry too much about the theory (unless you<br>
        want to spend a lot of time worrying about the theory).<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Live well,<br>
~wren<br>
<br>
______________________________<u></u>_________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/<u></u>mailman/listinfo/haskell-cafe</a><br>
</font></span></blockquote></div><br></div>