{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
module Util where
import Language.Haskell.TH
import Language.Haskell.TH.ExpandSyns
mkTest :: Q Type -> Q Type -> Q Exp
mkTest input expected =
do
input' <- input
runIO . putStrLn $ ("info: input = "++show input')
expected' <- expected
runIO . putStrLn $ ("info: expected = "++show expected')
actual <- expandSyns input'
runIO . putStrLn $ ("info: actual = "++show actual)
if (pprint expected'==pprint actual) then [| putStrLn "Ok" |] else [| error "expected /= actual" |]
forallT' xs = forallT ((PlainTV . mkName) `fmap` xs)
forallT'' xs = forallT' xs (cxt [])
varT' = varT . mkName
conT' = conT . mkName
x --> y = (arrowT `appT` x) `appT` y
infixr 5 -->
#if !MIN_VERSION_template_haskell(2,8,0)
reportWarning = report False
#endif