module Data.Array.Repa.Plugin.FatName
        ( GhcName (..)
        , FatName (..))
where
import Data.Array.Repa.Plugin.GHC.Pretty        ()

import DDC.Base.Pretty
import qualified DDC.Core.Flow.Prim     as D

import qualified Var                    as G
import qualified Literal                as G
import qualified TyCon                  as G
import qualified TypeRep                as G


data GhcName
        = GhcNameVar     G.Var
        | GhcNameTyCon   G.TyCon
        | GhcNameTyLit   G.TyLit
        | GhcNameLiteral G.Literal
        | GhcNameIntU   
        deriving (Eq, Ord)

instance Pretty GhcName where
 ppr nn
  = case nn of
        GhcNameVar     v        -> text "VAR   " <> ppr v
        GhcNameTyCon   tc       -> text "TYCON " <> ppr tc
        GhcNameTyLit   tylit    -> text "TYLIT " <> ppr tylit
        GhcNameLiteral lit      -> text "LIT   " <> ppr lit
        GhcNameIntU             -> text "Int#"


data FatName
        = FatName
        { fatNameGHC    :: GhcName
        , fatNameDDC    :: D.Name }
        deriving (Eq, Ord)

instance Pretty FatName where
 ppr (FatName _ name)   = ppr name