An introduction to Typeclass Metaprogramming - haskell | Upit