module PNT where import HsName import HsIdent import UniqueNames(PN,OptSrcLoc(..),HasOrig(..)) import TypedIds(IdTy,HasIdTy(..)) import SrcLoc1(HasSrcLoc(..)) import HasBaseName(HasBaseName(..)) import QualNames(QualNames(..),unqual) import PrettyPrint(Printable(..),PrintableOp(..)) import Data.Generics type PName = PN HsName type PIdent = HsIdentI PName type PId = PN Id data PNT = PNT PName (IdTy PId) OptSrcLoc deriving (Show,Read, Data, Typeable) instance Eq PNT where PNT i1 _ _ == PNT i2 _ _ = i1==i2 instance Ord PNT where compare (PNT i1 _ _) (PNT i2 _ _) = compare i1 i2 instance HasOrig PNT where orig (PNT pn _ _) = orig pn instance HasOrig i => HasOrig (HsIdentI i) where orig = orig . getHSName instance HasIdTy PId PNT where idTy (PNT _ ty _) = ty --instance HasNameSpace PNT where namespace (PNT _ idty _) = namespace idty --instance HasNameSpace i => HasNameSpace (HsIdentI i) where -- namespace = namespace . getHSName instance QualNames qn m n => QualNames (PN qn) m (PN n) where getQualifier = getQualifier . getBaseName getQualified = fmap getQualified mkUnqual = fmap mkUnqual mkQual m = fmap (mkQual m) instance Printable PNT where ppi (PNT i _ _) = ppi i wrap (PNT i _ _) = wrap i instance PrintableOp PNT where isOp (PNT i _ _) = isOp i ppiOp (PNT i _ _) = ppiOp i --instance Unique (PN i) where unique m (PN _ o) = o instance HasBaseName PNT HsName where getBaseName (PNT i _ _) = getBaseName i instance QualNames PNT ModuleName PNT where getQualifier = getQualifier . getBaseName getQualified (PNT i t p) = PNT (unqual i) t p -- hmm mkUnqual = id -- hmm mkQual m (PNT i t p) = PNT (mkQual m (getQualified i)) t p instance HasSrcLoc PNT where srcLoc (PNT i _ (N (Just s))) = s srcLoc (PNT i _ _) = srcLoc i -- hmm