{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH
import Language.Haskell.TH.Instances
import System.Timeout
import Test.Hspec
main :: IO ()
main = hspec $ do
-- See https://github.com/mgsloan/th-orphans/issues/13
it "Doesn't infinite loop when comparing types" $ do
-- This can either yield LT or GT because different TH
-- versions define the constructors in different orders.
result <- timeout (1000 * 100) $
compare (AppT (ConT ''Maybe) (ConT ''Int)) (ConT ''Char)
`shouldSatisfy` (/= EQ)
result `shouldBe` Just ()
-- See https://github.com/mgsloan/th-orphans/issues/14
it "Compares types correctly" $
compare (AppT (ConT ''Maybe) (ConT ''Int)) (AppT (ConT ''Maybe) (ConT ''Char))
`shouldBe` GT