[Template-haskell] Custom patternmatching for ADTs and Emulating TH Pattern splicing (was quasiquoting and guards)