Slides: link
I gave a presentation a little over a week ago on GHC lkanguage extensions. This blog post is both a publication of the materials and a touch of additional commentary. The presentation was a put together quickly and was meant to explore GHC/Haskell language extensions: what they are, what they do, how they’re used. It goes more for broad coverage rather than precise details. As a result, particularly when reviewing extensions like GADTs or Existential Quantification, the materials are sparse.
Thankfully, the GHC 7.10 User Guide is far more thorough than I. :)
As I read through the user guide, it got me thinking about the base Haskell language, specifically, Haskell 2010. That’s already a rather rich language. Excluding the standard library, and focusing strictly on the language, it features things like:
import qualified X.Y as XY
)import X.Y (cat, otherCat)
)import X.Y hiding (notThatCat)
)(+1) -- same as (\x -> x + 1)
Maybe a
Either a b -- with kind Either :: * -> * -> *
newtype Age = Age Int
type Pred a = (a -> Bool)
data Person = Person {name :: String, ...}
Given that as a base, it’s interesting to think about how the language extensions might have come about. There’s an extension for (I think) every Haskell 2010 core language feature.
Without further commentary, here’s the slides).
I hope they’re helpful to you, too. It was enlightening spending some time reading through the GHC User Guide to put that together.