Using Template Haskell for deriving instances