2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
5 \section[RdrName]{@RdrName@}
12 mkRdrUnqual, mkRdrQual,
13 mkSrcUnqual, mkSrcQual,
14 mkSysUnqual, mkSysQual,
15 mkPreludeQual, qualifyRdrName,
16 dummyRdrVarName, dummyRdrTcName,
19 rdrNameModule, rdrNameOcc,
20 isRdrDataCon, isRdrTyVar, isQual, isUnqual
23 #include "HsVersions.h"
25 import OccName ( NameSpace, tcName,
28 mkSrcOccFS, mkSrcVarOcc,
31 import Module ( Module, IfaceFlavour, mkSysModuleFS,
32 mkSrcModuleFS, pprModuleSep
34 import PrelMods ( pRELUDE )
36 import Util ( thenCmp )
40 %************************************************************************
42 \subsection{The main data type}
44 %************************************************************************
47 data RdrName = RdrName Qual OccName
54 %************************************************************************
56 \subsection{Simple functions}
58 %************************************************************************
61 rdrNameModule :: RdrName -> Module
62 rdrNameModule (RdrName (Qual m) _) = m
64 rdrNameOcc :: RdrName -> OccName
65 rdrNameOcc (RdrName _ occ) = occ
69 -- These two are the basic constructors
70 mkRdrUnqual :: OccName -> RdrName
71 mkRdrUnqual occ = RdrName Unqual occ
73 mkRdrQual :: Module -> OccName -> RdrName
74 mkRdrQual mod occ = RdrName (Qual mod) occ
76 -- These two are used when parsing source files
77 -- They do encode the module and occurrence names
78 mkSrcUnqual :: NameSpace -> FAST_STRING -> RdrName
79 mkSrcUnqual sp n = RdrName Unqual (mkSrcOccFS sp n)
81 mkSrcQual :: NameSpace -> FAST_STRING -> FAST_STRING -> RdrName
82 mkSrcQual sp m n = RdrName (Qual (mkSrcModuleFS m)) (mkSrcOccFS sp n)
84 -- These two are used when parsing interface files
85 -- They do not encode the module and occurrence name
86 mkSysUnqual :: NameSpace -> FAST_STRING -> RdrName
87 mkSysUnqual sp n = RdrName Unqual (mkSysOccFS sp n)
89 mkSysQual :: NameSpace -> (FAST_STRING, FAST_STRING, IfaceFlavour) -> RdrName
90 mkSysQual sp (m,n,hif) = RdrName (Qual (mkSysModuleFS m hif)) (mkSysOccFS sp n)
92 mkPreludeQual :: NameSpace -> Module -> FAST_STRING -> RdrName
93 mkPreludeQual sp mod n = RdrName (Qual mod) (mkSrcOccFS sp n)
95 qualifyRdrName :: Module -> RdrName -> RdrName
96 qualifyRdrName mod (RdrName Unqual occ) = RdrName (Qual mod) occ
97 qualifyRdrName mod rdr_name = rdr_name
101 -- This guy is used by the reader when HsSyn has a slot for
102 -- an implicit name that's going to be filled in by
103 -- the renamer. We can't just put "error..." because
104 -- we sometimes want to print out stuff after reading but
106 dummyRdrVarName = RdrName Unqual (mkSrcVarOcc SLIT("V-DUMMY"))
107 dummyRdrTcName = RdrName Unqual (mkSrcOccFS tcName SLIT("TC-DUMMY"))
112 isRdrDataCon (RdrName _ occ) = isDataOcc occ
113 isRdrTyVar (RdrName _ occ) = isTvOcc occ
115 isUnqual (RdrName Unqual _) = True
116 isUnqual other = False
118 isQual rdr_name = not (isUnqual rdr_name)
122 %************************************************************************
124 \subsection{Instances}
126 %************************************************************************
129 instance Outputable RdrName where
130 ppr (RdrName qual occ) = pp_qual qual <> ppr occ
132 pp_qual Unqual = empty
133 pp_qual (Qual mod) = ppr mod <> pprModuleSep mod
135 instance Eq RdrName where
136 a == b = case (a `compare` b) of { EQ -> True; _ -> False }
137 a /= b = case (a `compare` b) of { EQ -> False; _ -> True }
139 instance Ord RdrName where
140 a <= b = case (a `compare` b) of { LT -> True; EQ -> True; GT -> False }
141 a < b = case (a `compare` b) of { LT -> True; EQ -> False; GT -> False }
142 a >= b = case (a `compare` b) of { LT -> False; EQ -> True; GT -> True }
143 a > b = case (a `compare` b) of { LT -> False; EQ -> False; GT -> True }
145 compare (RdrName q1 o1) (RdrName q2 o2)
146 = (o1 `compare` o2) `thenCmp`
149 cmpQual Unqual Unqual = EQ
150 cmpQual Unqual (Qual _) = LT
151 cmpQual (Qual _) Unqual = GT
152 cmpQual (Qual m1) (Qual m2) = m1 `compare` m2