{-# 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)