{-# LANGUAGE Haskell2010 #-} {-# LANGUAGE TemplateHaskell #-} module TemplateHaskellQuasiquotes where import Language.Haskell.TH aDecl :: DecsQ aDecl :: DecsQ aDecl = [d| bar :: $aType -> [ (Int, String) ] bar $aPattern = $anExpression |] aPattern :: PatQ aPattern :: PatQ aPattern = [p| [ aCrazyLongVariableName , _unused , (y, z) , ( $aNumberPattern, "hello") ] |] aNumberPattern :: PatQ aNumberPattern :: PatQ aNumberPattern = [p| w@v@4.5 |] anExpression, anExpression2 :: ExpQ anExpression :: ExpQ anExpression = [e| [ (1 + $anExpression2, "world") ] |] anExpression2 :: ExpQ anExpression2 = [| (1 + round pi) |] aType :: TypeQ aType :: TypeQ aType = [t| [ (Double, String) ] |]