In this one-day course, you will take an in-depth look into Haskell's type system, including the various language extensions that the Glasgow Haskell Compiler (GHC) has to offer.
Haskell is an evolving language. With each new GHC release, there are new features, many of which add extra power to Haskell's already remarkable type system. But which extensions are widely used? Which are stable? How can one find out how they really work? While many features are really interesting, documentation is often scarce, and scattered around in various places such as blog posts and academic papers.
In this course, we'll provide a much needed overview, and then discuss the most important concepts systematically: from higher-rank polymorphism over GADTs and data kinds to type families and System FC (the formal system that GHC's core language is based on). We'll discuss how to use all these features, provide motivation and typical use cases, and warn about possible pitfalls. The course is hands-on, a combination of presentations and exercises. Exercises consist of carefully chosen small examples that illustrate the concepts discussed, and are often based on real-world libraries that you can find on Hackage.
Learn how to:
- Leverage the power of Haskell's type system,
- Write programs that are correct by construction,
- Understand the internals of widely known libraries that use advanced type system features,
- Participate in all the discussions on the latest greatest type system features of Haskell and GHC.
What the community says
"Great work! Well explained concepts and we went into very in depth detail seamlessly. Even though I had prior experience with the subject, I still learnt a tremendous amount."Attendee on 8th May 2014
"Top notch!"Attendee on 8th May 2014
"Really advanced! I'm overloaded :-)"Attendee on 8th May 2014
- Parametric polymorphism revisited
- Universal vs. existential quantification of types
- Higher-rank polymorphism
Types and Kinds
- Haskell's kind system
- Working with GADTs
- Promoting datatypes to kinds
- Kind polymorphism
- Type families
- Type equality
- Constraint kinds
- System FC
If you have some experience developing in Haskell, and are fascinated by its type system, but want to learn more about what's possible to express in the type system, get introduced to recent additions to the language, and understand some of the more tricky code available on Hackage – then this course is for you!
This course assumes a solid familiarity with the basics of the Haskell language, such as how to define functions and datatypes, how to define simple classes and instances, and how to make use of polymorphism and overloading. A certain curiosity and fascination with the type system of Haskell will without doubt also be helpful. What's not required is to already know about Haskell language extensions, or to be an expert in using applicative functors, monads, or monad transformers.
Bring your own hardware
Important! You are required to bring your own laptop for this course, with the Haskell Platform installed - to be able to try all the examples and exercises within your own environment.
A full installation guide for the course software will be provided with your joining instructions.