[project @ 1996-06-26 10:26:00 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         SYN_IE(RdrNameArithSeqInfo),
14         SYN_IE(RdrNameBangType),
15         SYN_IE(RdrNameBind),
16         SYN_IE(RdrNameClassDecl),
17         SYN_IE(RdrNameClassOpSig),
18         SYN_IE(RdrNameConDecl),
19         SYN_IE(RdrNameContext),
20         SYN_IE(RdrNameSpecDataSig),
21         SYN_IE(RdrNameDefaultDecl),
22         SYN_IE(RdrNameFixityDecl),
23         SYN_IE(RdrNameGRHS),
24         SYN_IE(RdrNameGRHSsAndBinds),
25         SYN_IE(RdrNameHsBinds),
26         SYN_IE(RdrNameHsExpr),
27         SYN_IE(RdrNameHsModule),
28         SYN_IE(RdrNameIE),
29         SYN_IE(RdrNameImportDecl),
30         SYN_IE(RdrNameInstDecl),
31         SYN_IE(RdrNameMatch),
32         SYN_IE(RdrNameMonoBinds),
33         SYN_IE(RdrNameMonoType),
34         SYN_IE(RdrNamePat),
35         SYN_IE(RdrNamePolyType),
36         SYN_IE(RdrNameQual),
37         SYN_IE(RdrNameSig),
38         SYN_IE(RdrNameSpecInstSig),
39         SYN_IE(RdrNameStmt),
40         SYN_IE(RdrNameTyDecl),
41
42         SYN_IE(RdrNameClassOpPragmas),
43         SYN_IE(RdrNameClassPragmas),
44         SYN_IE(RdrNameDataPragmas),
45         SYN_IE(RdrNameGenPragmas),
46         SYN_IE(RdrNameInstancePragmas),
47         SYN_IE(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                = Qualifier             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}