Used judiciously, type level programming can let you write programs that are safer, more expressive, more flexible, and easier to maintain over the long term. Unfortunately, learning when and how to make effective use of type-level programming constructs can be difficult. In this post you'll learn how to apply many basic type-level programming concepts as you incrementally build a type-level theming system.
When you're finished with this article, you should come away with an idea of how to effectively use type classes, type families, GADTs, and haskell's Kind system to write better applications.
This article is based off of the ideas presented in my 2021-09-10 talk at the haskell.love conference titled: Make It Purple! An Introduction to type-level programming.