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