Well-Typed's Guide to the Haskell Type System

Topics covered at HASKELL-TYPES-01-01
View Schedule & Book More dates available

Next up:

In this one-day course, we are providing 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 some 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."

May attendee on 8th May 2014

"Top notch!"

May attendee on 8th May 2014

"Really advanced! I'm overloaded :-)"

May attendee on 8th May 2014

About the Author

Andres Löh

Andres Löh is a long-time functional programming enthusiast. He has started using Haskell in 1997 while being an undergraduate studying mathematics. He obtained his PhD on datatype-generic programming using Haskell from Utrecht University in 2004. Since then, he has continued to use Haskell in research and practice, including teaching various courses both to students and participants from industry. His main interests, next to datatype-generic programming, are embedded domain-specific languages, unleashing the full power of Haskell's type system, parallelism and applying functional languages to real-life problems. Since 2010, Andres is an independent Haskell consultant and partner at Well-Typed LLP.

Thanks to our partners


  • 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-level Programming

  • 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 requested 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. If you are unable to bring a laptop for this course, please contact the sales team on +44 207 183 9040 or email sales. A full installation guide for the course software will be provided with your joining instructions.