In this special topic, we'll explore how to use Haskell for implementing domain specific languages (DSLs) and how to use GADTs to help us write better software.
We'll implement two DSLs: first, a simple calculator language, and then a basic templating language.
We'll look at how GADTs let us use type parameters to constrain types so that we can write programs with fewer bugs by having rich types.