Type level programming
Overview
Type level programming allows you to have safety properties, and in some cases, even gain performance optimizations through the use of these types.
Useful links
Basic Type Level Programming in Haskell
Part I: Dependent Types in Haskell