2 % (c) The AQUA Project, Glasgow University, 1996
4 \section[RnHsSyn]{Specialisations of the @HsSyn@ syntax for the renamer}
7 #include "HsVersions.h"
15 import Id ( GenId, SYN_IE(Id) )
17 import Outputable ( Outputable(..){-instance * []-} )
18 import PprStyle ( PprStyle(..) )
19 import PprType ( GenType, GenTyVar, TyCon )
21 import Name ( SYN_IE(NameSet), unitNameSet, mkNameSet, minusNameSet, unionNameSets, emptyNameSet )
22 import TyCon ( TyCon )
23 import TyVar ( GenTyVar )
24 import Unique ( Unique )
25 import Util ( panic, pprPanic{-, pprTrace ToDo:rm-} )
30 type RenamedArithSeqInfo = ArithSeqInfo Fake Fake Name RenamedPat
31 type RenamedBind = Bind Fake Fake Name RenamedPat
32 type RenamedClassDecl = ClassDecl Fake Fake Name RenamedPat
33 type RenamedClassOpSig = Sig Name
34 type RenamedConDecl = ConDecl Name
35 type RenamedContext = Context Name
36 type RenamedHsDecl = HsDecl Fake Fake Name RenamedPat
37 type RenamedSpecDataSig = SpecDataSig Name
38 type RenamedDefaultDecl = DefaultDecl Name
39 type RenamedFixityDecl = FixityDecl Name
40 type RenamedGRHS = GRHS Fake Fake Name RenamedPat
41 type RenamedGRHSsAndBinds = GRHSsAndBinds Fake Fake Name RenamedPat
42 type RenamedHsBinds = HsBinds Fake Fake Name RenamedPat
43 type RenamedHsExpr = HsExpr Fake Fake Name RenamedPat
44 type RenamedHsModule = HsModule Fake Fake Name RenamedPat
45 type RenamedInstDecl = InstDecl Fake Fake Name RenamedPat
46 type RenamedMatch = Match Fake Fake Name RenamedPat
47 type RenamedMonoBinds = MonoBinds Fake Fake Name RenamedPat
48 type RenamedPat = InPat Name
49 type RenamedHsType = HsType Name
50 type RenamedRecordBinds = HsRecordBinds Fake Fake Name RenamedPat
51 type RenamedSig = Sig Name
52 type RenamedSpecInstSig = SpecInstSig Name
53 type RenamedStmt = Stmt Fake Fake Name RenamedPat
54 type RenamedTyDecl = TyDecl Name
56 type RenamedClassOpPragmas = ClassOpPragmas Name
57 type RenamedClassPragmas = ClassPragmas Name
58 type RenamedDataPragmas = DataPragmas Name
59 type RenamedGenPragmas = GenPragmas Name
60 type RenamedInstancePragmas = InstancePragmas Name
63 %************************************************************************
65 \subsection{Free variables}
67 %************************************************************************
70 extractCtxtTyNames :: RenamedContext -> NameSet
71 extractCtxtTyNames ctxt = foldr (unionNameSets . extractHsTyNames . snd) emptyNameSet ctxt
73 extractHsTyNames :: RenamedHsType -> NameSet
77 get (MonoTyApp ty1 ty2) = get ty1 `unionNameSets` get ty2
78 get (MonoListTy tc ty) = unitNameSet tc `unionNameSets` get ty
79 get (MonoTupleTy tc tys) = foldr (unionNameSets . get) (unitNameSet tc) tys
80 get (MonoFunTy ty1 ty2) = get ty1 `unionNameSets` get ty2
81 get (MonoDictTy cls ty) = unitNameSet cls `unionNameSets` get ty
82 get (MonoTyVar tv) = unitNameSet tv
83 get (HsForAllTy tvs ctxt ty) = foldr (unionNameSets . get . snd) (get ty) ctxt
85 mkNameSet (map getTyVarName tvs)