[project @ 1998-12-02 13:17:09 by simonm]
[ghc-hetmet.git] / ghc / compiler / rename / RnHsSyn.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1996-1998
3 %
4 \section[RnHsSyn]{Specialisations of the @HsSyn@ syntax for the renamer}
5
6 \begin{code}
7 module RnHsSyn where
8
9 #include "HsVersions.h"
10
11 import RnEnv            ( listTyCon_name, tupleTyCon_name )
12
13 import HsSyn
14 import HsPragmas        ( InstancePragmas, GenPragmas, DataPragmas, ClassPragmas, ClassOpPragmas )
15
16 import BasicTypes       ( Unused )
17 import Name             ( Name )
18 import NameSet
19 import Util
20 import Outputable
21 \end{code}
22
23
24 \begin{code}
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
49
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
55 \end{code}
56
57 %************************************************************************
58 %*                                                                      *
59 \subsection{Free variables}
60 %*                                                                      *
61 %************************************************************************
62
63 These free-variable finders returns tycons and classes too.
64
65 \begin{code}
66 extractHsTyNames   :: RenamedHsType -> NameSet
67 extractHsTyNames ty
68   = get ty
69   where
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)
79                                             `minusNameSet`
80                                     mkNameSet (map getTyVarName tvs)
81
82 extractHsTyNames_s  :: [RenamedHsType] -> NameSet
83 extractHsTyNames_s tys = foldr (unionNameSets . extractHsTyNames) emptyNameSet tys
84
85 extractHsCtxtTyNames :: RenamedContext -> NameSet
86 extractHsCtxtTyNames ctxt = foldr (unionNameSets . get) emptyNameSet ctxt
87   where
88     get (cls, tys) = unitNameSet cls `unionNameSets` extractHsTyNames_s tys
89 \end{code}
90