Type and Data Manipulation with Template Haskell