{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Generics.MRSOP.Base.Show where
import Generics.MRSOP.Base.NS
import Generics.MRSOP.Base.NP
import Generics.MRSOP.Base.Universe
import Generics.MRSOP.Util
instance (Show1 phi, Show1 ki) => Show (NA ki (AnnFix ki codes phi) a) where
show = showNA
showNA :: (Show1 phi, Show1 ki) => NA ki (AnnFix ki codes phi) a -> String
showNA (NA_I i) = "(NA_I " ++ showFix i ++ ")"
showNA (NA_K k) = "(NA_K " ++ show1 k ++ ")"
instance (Show1 phi, Show1 ki) => Show (PoA ki (AnnFix ki codes phi) xs) where
show = showNP
showNP :: (Show1 phi, Show1 ki) => PoA ki (AnnFix ki codes phi) xs -> String
showNP NP0 = "NP0"
showNP (a :* b) = showNA a ++ " :* " ++ showNP b
instance (Show1 phi, Show1 ki) => Show (Rep ki (AnnFix ki codes phi) xs) where
show = showRep
showRep :: (Show1 phi, Show1 ki) => Rep ki (AnnFix ki codes phi) xs -> String
showRep x =
case sop x of
Tag c poa ->
"(" ++ show c ++ " " ++ showNP poa ++ ")"
instance (Show1 phi, Show1 ki) => Show (AnnFix ki codes phi ix) where
show = showFix
showFix :: (Show1 phi, Show1 ki) => AnnFix ki codes phi ix -> String
showFix (AnnFix a x) = "(" ++ show1 a ++ " " ++ showRep x ++ ")"