using template haskell