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 RenamedSpecInstSig = SpecInstSig Name
48 type RenamedStmt = Stmt Unused Name RenamedPat
49 type RenamedTyDecl = TyDecl Name
51 type RenamedClassOpPragmas = ClassOpPragmas Name
52 type RenamedClassPragmas = ClassPragmas Name
53 type RenamedDataPragmas = DataPragmas Name
54 type RenamedGenPragmas = GenPragmas Name
55 type RenamedInstancePragmas = InstancePragmas Name
58 %************************************************************************
60 \subsection{Free variables}
62 %************************************************************************
64 These free-variable finders returns tycons and classes too.
67 extractHsTyNames :: RenamedHsType -> NameSet
71 get (MonoTyApp ty1 ty2) = get ty1 `unionNameSets` get ty2
72 get (MonoListTy tc ty) = unitNameSet tc `unionNameSets` get ty
73 get (MonoTupleTy tc tys) = unitNameSet tc `unionNameSets` extractHsTyNames_s tys
74 get (MonoFunTy ty1 ty2) = get ty1 `unionNameSets` get ty2
75 get (MonoDictTy cls tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys
76 get (MonoTyVar tv) = unitNameSet tv
77 get (HsForAllTy tvs ctxt ty) = (extractHsCtxtTyNames ctxt `unionNameSets` get ty)
79 mkNameSet (map getTyVarName tvs)
81 extractHsTyNames_s :: [RenamedHsType] -> NameSet
82 extractHsTyNames_s tys = foldr (unionNameSets . extractHsTyNames) emptyNameSet tys
84 extractHsCtxtTyNames :: RenamedContext -> NameSet
85 extractHsCtxtTyNames ctxt = foldr (unionNameSets . get) emptyNameSet ctxt
87 get (cls, tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys