{-# OPTIONS -XScopedTypeVariables -XRank2Types #-} {-# LANGUAGE TemplateHaskell #-} module TestShow where import Text.GRead import Text.GRead.Derive import Text.GShow import Language.Haskell.TH import Language.Haskell.TH.Syntax data T1 = T1 deriving Show $(deriveShow ''T1) s1 = gshow T1 data T2 a = T2 $(deriveShow ''T2) s2 = gshow (T2 :: (T2 T1)) data T3 a = T3 a deriving Show $(deriveShow ''T3) s3 = gshow $ T3 T1 infixl 5 :<: infixr 6 :>: data T4 a = T4 a :<: a | T4 a :>: T4 a | C4 deriving Show data T5 = T5 deriving Show $(deriveShow ''T4) $(deriveShow ''T5) s41 = gshow (C4 :>: C4 :>: C4 :>: C4 :: T4 T5) s42 = gshow ((C4 :>: C4) :>: C4 :: T4 T5) s43 = gshow (C4 :>: (C4 :>: C4) :: T4 T5) s44 = gshow (C4 :>: C4 :>: C4 :<: T5 :: T4 T5) s45 = gshow (C4 :>: C4 :>: C4 :<: T5 :<: T5 :: T4 T5) $(deriveGrammar ''T4) $(deriveGrammar ''T5) v41 = gread s41 :: GReadResult (T4 T5) v42 = gread s42 :: GReadResult (T4 T5) v43 = gread s43 :: GReadResult (T4 T5) v44 = gread s44 :: GReadResult (T4 T5) v45 = gread s45 :: GReadResult (T4 T5)