Skip to content

A little course to learn about some of the more obscure GHC extensions.

License

Notifications You must be signed in to change notification settings

albertodvp/haskell-exercises

 
 

Repository files navigation

GHC exercises 🚀

For solutions, please see the Exercises.hs modules inside the answers branch.

OK, you know your monoids from your monads. You know how to write a terminal application or two. What's next? What are these language extensions that keep being mentioned? How "type-safe" can you really be?

This repository, I hope, will provide some stepping stones. We'll go through extensions one at a time, and build up a richer vocabulary for talking about Haskell programs, and look to move our assertions up into types, where they can be verified at compile time.


What this isn't.

This is a deep dive into GHC extensions, the power that each one gives us, and how we can combine extensions to achieve very strong guarantees at compile-time. This is not based around concepts; there won't be sections on "dependently-typed programming", or "generic programming", though these concepts will turn up throughout as we dig deeper into the extensions.

If you're interested in something more project-based, I absolutely, 1000% recommend Thinking with Types, written by Sandy Maguire. It is a fantastic resource, and one on which I already rely when explaining concepts to others.

Contents

  1. GADTs
  2. FlexibleInstances
  3. KindSignatures
  4. DataKinds
  5. RankNTypes
  6. TypeFamilies
  7. ConstraintKinds
  8. PolyKinds
  9. MultiParamTypeClasses
  10. FunctionalDependencies

Setup

Assuming you have Cabal or Stack setup, you should be able to navigate to any of the exercise* directories, and run your usual commands:

Repl

$ stack repl
$ cabal repl

Build

$ stack build
$ cabal build

It's going to make it a lot easier to iterate through the exercises if you cabal install ghcid or stack install ghcid. Just as above, once this is done, you can navigate to the exercise directory and run it with your preferred repl command:

$ ghcid -c "stack repl"
$ ghcid -c "cabal repl"

About

A little course to learn about some of the more obscure GHC extensions.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Haskell 100.0%