use of template haskell