[project @ 1996-06-05 06:44:31 by partain]
[ghc-hetmet.git] / ghc / compiler / reader / RdrHsSyn.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1996
3 %
4 \section[RdrHsSyn]{Specialisations of the @HsSyn@ syntax for the reader}
5
6 (Well, really, for specialisations involving @RdrName@s, even if
7 they are used somewhat later on in the compiler...)
8
9 \begin{code}
10 #include "HsVersions.h"
11
12 module RdrHsSyn (
13         RdrNameArithSeqInfo(..),
14         RdrNameBangType(..),
15         RdrNameBind(..),
16         RdrNameClassDecl(..),
17         RdrNameClassOpSig(..),
18         RdrNameConDecl(..),
19         RdrNameContext(..),
20         RdrNameSpecDataSig(..),
21         RdrNameDefaultDecl(..),
22         RdrNameFixityDecl(..),
23         RdrNameGRHS(..),
24         RdrNameGRHSsAndBinds(..),
25         RdrNameHsBinds(..),
26         RdrNameHsExpr(..),
27         RdrNameHsModule(..),
28         RdrNameIE(..),
29         RdrNameImportDecl(..),
30         RdrNameInstDecl(..),
31         RdrNameMatch(..),
32         RdrNameMonoBinds(..),
33         RdrNameMonoType(..),
34         RdrNamePat(..),
35         RdrNamePolyType(..),
36         RdrNameQual(..),
37         RdrNameSig(..),
38         RdrNameSpecInstSig(..),
39         RdrNameStmt(..),
40         RdrNameTyDecl(..),
41
42         RdrNameClassOpPragmas(..),
43         RdrNameClassPragmas(..),
44         RdrNameDataPragmas(..),
45         RdrNameGenPragmas(..),
46         RdrNameInstancePragmas(..),
47         RdrNameCoreExpr(..),
48
49         getRawImportees,
50         getRawExportees
51     ) where
52
53 IMP_Ubiq()
54
55 import HsSyn
56 import Name             ( ExportFlag(..) )
57 \end{code}
58
59 \begin{code}
60 type RdrNameArithSeqInfo        = ArithSeqInfo          Fake Fake RdrName RdrNamePat
61 type RdrNameBangType            = BangType              RdrName
62 type RdrNameBind                = Bind                  Fake Fake RdrName RdrNamePat
63 type RdrNameClassDecl           = ClassDecl             Fake Fake RdrName RdrNamePat
64 type RdrNameClassOpSig          = Sig                   RdrName
65 type RdrNameConDecl             = ConDecl               RdrName
66 type RdrNameContext             = Context               RdrName
67 type RdrNameSpecDataSig         = SpecDataSig           RdrName
68 type RdrNameDefaultDecl         = DefaultDecl           RdrName
69 type RdrNameFixityDecl          = FixityDecl            RdrName
70 type RdrNameGRHS                = GRHS                  Fake Fake RdrName RdrNamePat
71 type RdrNameGRHSsAndBinds       = GRHSsAndBinds         Fake Fake RdrName RdrNamePat
72 type RdrNameHsBinds             = HsBinds               Fake Fake RdrName RdrNamePat
73 type RdrNameHsExpr              = HsExpr                Fake Fake RdrName RdrNamePat
74 type RdrNameHsModule            = HsModule              Fake Fake RdrName RdrNamePat
75 type RdrNameIE                  = IE                    RdrName
76 type RdrNameImportDecl          = ImportDecl            RdrName
77 type RdrNameInstDecl            = InstDecl              Fake Fake RdrName RdrNamePat
78 type RdrNameMatch               = Match                 Fake Fake RdrName RdrNamePat
79 type RdrNameMonoBinds           = MonoBinds             Fake Fake RdrName RdrNamePat
80 type RdrNameMonoType            = MonoType              RdrName
81 type RdrNamePat                 = InPat                 RdrName
82 type RdrNamePolyType            = PolyType              RdrName
83 type RdrNameQual                = Qual                  Fake Fake RdrName RdrNamePat
84 type RdrNameSig                 = Sig                   RdrName
85 type RdrNameSpecInstSig         = SpecInstSig           RdrName
86 type RdrNameStmt                = Stmt                  Fake Fake RdrName RdrNamePat
87 type RdrNameTyDecl              = TyDecl                RdrName
88
89 type RdrNameClassOpPragmas      = ClassOpPragmas        RdrName
90 type RdrNameClassPragmas        = ClassPragmas          RdrName
91 type RdrNameDataPragmas         = DataPragmas           RdrName
92 type RdrNameGenPragmas          = GenPragmas            RdrName
93 type RdrNameInstancePragmas     = InstancePragmas       RdrName
94 type RdrNameCoreExpr            = UnfoldingCoreExpr     RdrName
95 \end{code}
96
97 %************************************************************************
98 %*                                                                      *
99 \subsection{Grabbing importees and exportees}
100 %*                                                                      *
101 %************************************************************************
102
103 \begin{code}
104 getRawImportees :: [RdrNameIE] ->  [RdrName]
105 getRawExportees :: Maybe [RdrNameIE] -> ([(RdrName, ExportFlag)], [Module])
106
107 getRawImportees imps
108   = foldr do_imp [] imps
109   where
110     do_imp (IEVar n)         acc = n:acc
111     do_imp (IEThingAbs  n)   acc = n:acc
112     do_imp (IEThingWith n _) acc = n:acc
113     do_imp (IEThingAll  n)   acc = n:acc
114
115 getRawExportees Nothing     = ([], [])
116 getRawExportees (Just exps)
117   = foldr do_exp ([],[]) exps
118   where
119     do_exp (IEVar n)            (prs, mods) = ((n, ExportAll):prs, mods)
120     do_exp (IEThingAbs n)       (prs, mods) = ((n, ExportAbs):prs, mods)
121     do_exp (IEThingAll n)       (prs, mods) = ((n, ExportAll):prs, mods)
122     do_exp (IEThingWith n _)    (prs, mods) = ((n, ExportAll):prs, mods)
123     do_exp (IEModuleContents n) (prs, mods) = (prs, n : mods)
124 \end{code}