Thinking with Types: Type-Level Programming in Haskell
leanpub.com