2 % (c) The AQUA Project, Glasgow University, 1996-1998
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 TysWiredIn ( tupleTyCon, unboxedTupleTyCon,
15 listTyCon, charTyCon )
16 import Name ( Name, getName )
24 type RenamedArithSeqInfo = ArithSeqInfo Name RenamedPat
25 type RenamedClassOpSig = Sig Name
26 type RenamedConDecl = ConDecl Name
27 type RenamedContext = Context Name
28 type RenamedHsDecl = HsDecl Name RenamedPat
29 type RenamedTyClDecl = TyClDecl Name RenamedPat
30 type RenamedSpecDataSig = SpecDataSig Name
31 type RenamedDefaultDecl = DefaultDecl Name
32 type RenamedForeignDecl = ForeignDecl Name
33 type RenamedGRHS = GRHS Name RenamedPat
34 type RenamedGRHSs = GRHSs Name RenamedPat
35 type RenamedHsBinds = HsBinds Name RenamedPat
36 type RenamedHsExpr = HsExpr Name RenamedPat
37 type RenamedHsModule = HsModule Name RenamedPat
38 type RenamedInstDecl = InstDecl Name RenamedPat
39 type RenamedMatch = Match Name RenamedPat
40 type RenamedMonoBinds = MonoBinds Name RenamedPat
41 type RenamedPat = InPat Name
42 type RenamedHsType = HsType Name
43 type RenamedRecordBinds = HsRecordBinds Name RenamedPat
44 type RenamedSig = Sig Name
45 type RenamedStmt = Stmt Name RenamedPat
46 type RenamedFixitySig = FixitySig Name
48 type RenamedClassOpPragmas = ClassOpPragmas Name
49 type RenamedClassPragmas = ClassPragmas Name
50 type RenamedDataPragmas = DataPragmas Name
51 type RenamedGenPragmas = GenPragmas Name
52 type RenamedInstancePragmas = InstancePragmas Name
55 %************************************************************************
57 \subsection{Free variables}
59 %************************************************************************
61 These free-variable finders returns tycons and classes too.
64 charTyCon_name, listTyCon_name :: Name
65 charTyCon_name = getName charTyCon
66 listTyCon_name = getName listTyCon
68 tupleTyCon_name :: Bool -> Int -> Name
69 tupleTyCon_name True n = getName (tupleTyCon n)
70 tupleTyCon_name False n = getName (unboxedTupleTyCon n)
72 extractHsTyNames :: RenamedHsType -> NameSet
76 get (MonoTyApp ty1 ty2) = get ty1 `unionNameSets` get ty2
77 get (MonoListTy ty) = unitNameSet listTyCon_name
78 `unionNameSets` get ty
79 get (MonoTupleTy tys boxed) = unitNameSet (tupleTyCon_name boxed (length tys))
80 `unionNameSets` extractHsTyNames_s tys
81 get (MonoFunTy ty1 ty2) = get ty1 `unionNameSets` get ty2
82 get (MonoDictTy cls tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys
83 get (MonoTyVar tv) = unitNameSet tv
84 get (HsForAllTy tvs ctxt ty) = (extractHsCtxtTyNames ctxt `unionNameSets` get ty)
86 mkNameSet (map getTyVarName tvs)
88 extractHsTyNames_s :: [RenamedHsType] -> NameSet
89 extractHsTyNames_s tys = foldr (unionNameSets . extractHsTyNames) emptyNameSet tys
91 extractHsCtxtTyNames :: RenamedContext -> NameSet
92 extractHsCtxtTyNames ctxt = foldr (unionNameSets . get) emptyNameSet ctxt
94 get (cls, tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys