template haskell code