2 % (c) The AQUA Project, Glasgow University, 1996-1998
4 \section[RnHsSyn]{Specialisations of the @HsSyn@ syntax for the renamer}
9 #include "HsVersions.h"
11 import RnEnv ( listTyCon_name, tupleTyCon_name )
14 import HsPragmas ( InstancePragmas, GenPragmas, DataPragmas, ClassPragmas, ClassOpPragmas )
16 import BasicTypes ( Unused )
25 type RenamedArithSeqInfo = ArithSeqInfo Unused Name RenamedPat
26 type RenamedClassDecl = ClassDecl Unused Name RenamedPat
27 type RenamedClassOpSig = Sig Name
28 type RenamedConDecl = ConDecl Name
29 type RenamedContext = Context Name
30 type RenamedHsDecl = HsDecl Unused Name RenamedPat
31 type RenamedSpecDataSig = SpecDataSig Name
32 type RenamedDefaultDecl = DefaultDecl Name
33 type RenamedForeignDecl = ForeignDecl 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 ty) = unitNameSet listTyCon_name
72 `unionNameSets` get ty
73 get (MonoTupleTy tys boxed) = unitNameSet (tupleTyCon_name boxed (length tys))
74 `unionNameSets` extractHsTyNames_s tys
75 get (MonoFunTy ty1 ty2) = get ty1 `unionNameSets` get ty2
76 get (MonoDictTy cls tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys
77 get (MonoTyVar tv) = unitNameSet tv
78 get (HsForAllTy tvs ctxt ty) = (extractHsCtxtTyNames ctxt `unionNameSets` get ty)
80 mkNameSet (map getTyVarName tvs)
82 extractHsTyNames_s :: [RenamedHsType] -> NameSet
83 extractHsTyNames_s tys = foldr (unionNameSets . extractHsTyNames) emptyNameSet tys
85 extractHsCtxtTyNames :: RenamedContext -> NameSet
86 extractHsCtxtTyNames ctxt = foldr (unionNameSets . get) emptyNameSet ctxt
88 get (cls, tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys