{-# LANGUAGE CPP #-}
{-# LANGUAGE TemplateHaskell #-}
module Util where
import Language.Haskell.TH
import Language.Haskell.TH.Datatype.TyVarBndr
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' :: [String] -> Q Cxt -> Q Type -> Q Type
forallT' xs = forallT ((plainTVSpecified . mkName) `fmap` xs)
forallT'' :: [String] -> Q Type -> Q Type
forallT'' xs = forallT' xs (cxt [])
varT' :: String -> Q Type
varT' = varT . mkName
conT' :: String -> Q Type
conT' = conT . mkName
(-->) :: Q Type -> Q Type -> Q Type
x --> y = (arrowT `appT` x) `appT` y
infixr 5 -->
#if !MIN_VERSION_template_haskell(2,8,0)
reportWarning :: String -> Q ()
reportWarning = report False
#endif