1{-# LANGUAGE TemplateHaskellQuotes #-} 2{-# LANGUAGE MultiParamTypeClasses #-} 3 4module Main (main) where 5 6import Language.Haskell.TH 7 8u1 :: a 9u1 = undefined 10 11u2 :: a 12u2 = undefined 13 14f :: a 15f = undefined 16 17(.+.) :: a 18(.+.) = undefined 19 20main :: IO () 21main = do runQ [| f u1 u2 |] >>= p 22 runQ [| u1 `f` u2 |] >>= p 23 runQ [| (.+.) u1 u2 |] >>= p 24 runQ [| u1 .+. u2 |] >>= p 25 runQ [| (:) u1 u2 |] >>= p 26 runQ [| u1 : u2 |] >>= p 27 runQ [| \((:) x xs) -> x |] >>= p 28 runQ [| \(x : xs) -> x |] >>= p 29 runQ [d| class Foo a b where 30 foo :: a -> b |] >>= p 31 runQ [| \x -> (x, 1 `x` 2) |] >>= p 32 runQ [| \(+) -> ((+), 1 + 2) |] >>= p 33 runQ [| (f, 1 `f` 2) |] >>= p 34 runQ [| ((.+.), 1 .+. 2) |] >>= p 35 36p :: Ppr a => a -> IO () 37p = putStrLn . pprint 38 39