2 % (c) The AQUA Project, Glasgow University, 1996
4 \section[RnHsSyn]{Specialisations of the @HsSyn@ syntax for the renamer}
9 #include "HsVersions.h"
12 import HsPragmas ( InstancePragmas, GenPragmas, DataPragmas, ClassPragmas, ClassOpPragmas )
14 import Id ( GenId, Id )
15 import BasicTypes ( Unused, NewOrData, IfaceFlavour )
17 import Name ( NameSet, unitNameSet, mkNameSet, minusNameSet, unionNameSets, emptyNameSet )
18 import TyVar ( GenTyVar )
19 import Unique ( Unique )
26 type RenamedArithSeqInfo = ArithSeqInfo Unused Name RenamedPat
27 type RenamedClassDecl = ClassDecl Unused Name RenamedPat
28 type RenamedClassOpSig = Sig Name
29 type RenamedConDecl = ConDecl Name
30 type RenamedContext = Context Name
31 type RenamedHsDecl = HsDecl Unused Name RenamedPat
32 type RenamedSpecDataSig = SpecDataSig Name
33 type RenamedDefaultDecl = DefaultDecl Name
34 type RenamedFixityDecl = FixityDecl Name
35 type RenamedGRHS = GRHS Unused Name RenamedPat
36 type RenamedGRHSsAndBinds = GRHSsAndBinds Unused Name RenamedPat
37 type RenamedHsBinds = HsBinds Unused Name RenamedPat
38 type RenamedHsExpr = HsExpr Unused Name RenamedPat
39 type RenamedHsModule = HsModule Unused Name RenamedPat
40 type RenamedInstDecl = InstDecl Unused Name RenamedPat
41 type RenamedMatch = Match Unused Name RenamedPat
42 type RenamedMonoBinds = MonoBinds Unused Name RenamedPat
43 type RenamedPat = InPat Name
44 type RenamedHsType = HsType Name
45 type RenamedRecordBinds = HsRecordBinds Unused Name RenamedPat
46 type RenamedSig = Sig Name
47 type RenamedStmt = Stmt Unused Name RenamedPat
48 type RenamedTyDecl = TyDecl Name
50 type RenamedClassOpPragmas = ClassOpPragmas Name
51 type RenamedClassPragmas = ClassPragmas Name
52 type RenamedDataPragmas = DataPragmas Name
53 type RenamedGenPragmas = GenPragmas Name
54 type RenamedInstancePragmas = InstancePragmas Name
57 %************************************************************************
59 \subsection{Free variables}
61 %************************************************************************
63 These free-variable finders returns tycons and classes too.
66 extractHsTyNames :: RenamedHsType -> NameSet
70 get (MonoTyApp ty1 ty2) = get ty1 `unionNameSets` get ty2
71 get (MonoListTy tc ty) = unitNameSet tc `unionNameSets` get ty
72 get (MonoTupleTy tc tys) = unitNameSet tc `unionNameSets` extractHsTyNames_s tys
73 get (MonoFunTy ty1 ty2) = get ty1 `unionNameSets` get ty2
74 get (MonoDictTy cls tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys
75 get (MonoTyVar tv) = unitNameSet tv
76 get (HsForAllTy tvs ctxt ty) = (extractHsCtxtTyNames ctxt `unionNameSets` get ty)
78 mkNameSet (map getTyVarName tvs)
80 extractHsTyNames_s :: [RenamedHsType] -> NameSet
81 extractHsTyNames_s tys = foldr (unionNameSets . extractHsTyNames) emptyNameSet tys
83 extractHsCtxtTyNames :: RenamedContext -> NameSet
84 extractHsCtxtTyNames ctxt = foldr (unionNameSets . get) emptyNameSet ctxt
86 get (cls, tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys