29f69cb3163317859440a407b68a56687a545065
[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         RdrNameBind(..),
15         RdrNameClassDecl(..),
16         RdrNameClassOpSig(..),
17         RdrNameConDecl(..),
18         RdrNameContext(..),
19         RdrNameSpecDataSig(..),
20         RdrNameDefaultDecl(..),
21         RdrNameFixityDecl(..),
22         RdrNameGRHS(..),
23         RdrNameGRHSsAndBinds(..),
24         RdrNameHsBinds(..),
25         RdrNameHsExpr(..),
26         RdrNameHsModule(..),
27         RdrNameIE(..),
28         RdrNameImportDecl(..),
29         RdrNameInstDecl(..),
30         RdrNameMatch(..),
31         RdrNameMonoBinds(..),
32         RdrNameMonoType(..),
33         RdrNamePat(..),
34         RdrNamePolyType(..),
35         RdrNameQual(..),
36         RdrNameSig(..),
37         RdrNameSpecInstSig(..),
38         RdrNameStmt(..),
39         RdrNameTyDecl(..),
40
41         RdrNameClassOpPragmas(..),
42         RdrNameClassPragmas(..),
43         RdrNameDataPragmas(..),
44         RdrNameGenPragmas(..),
45         RdrNameInstancePragmas(..),
46         RdrNameCoreExpr(..),
47
48         getRawImportees,
49         getRawExportees
50     ) where
51
52 import Ubiq
53
54 import HsSyn
55 import Outputable       ( ExportFlag(..) )
56 \end{code}
57
58 \begin{code}
59 type RdrNameArithSeqInfo        = ArithSeqInfo          Fake Fake RdrName RdrNamePat
60 type RdrNameBind                = Bind                  Fake Fake RdrName RdrNamePat
61 type RdrNameClassDecl           = ClassDecl             Fake Fake RdrName RdrNamePat
62 type RdrNameClassOpSig          = Sig                   RdrName
63 type RdrNameConDecl             = ConDecl               RdrName
64 type RdrNameContext             = Context               RdrName
65 type RdrNameSpecDataSig         = SpecDataSig           RdrName
66 type RdrNameDefaultDecl         = DefaultDecl           RdrName
67 type RdrNameFixityDecl          = FixityDecl            RdrName
68 type RdrNameGRHS                = GRHS                  Fake Fake RdrName RdrNamePat
69 type RdrNameGRHSsAndBinds       = GRHSsAndBinds         Fake Fake RdrName RdrNamePat
70 type RdrNameHsBinds             = HsBinds               Fake Fake RdrName RdrNamePat
71 type RdrNameHsExpr              = HsExpr                Fake Fake RdrName RdrNamePat
72 type RdrNameHsModule            = HsModule              Fake Fake RdrName RdrNamePat
73 type RdrNameIE                  = IE                    RdrName
74 type RdrNameImportDecl          = ImportDecl            RdrName
75 type RdrNameInstDecl            = InstDecl              Fake Fake RdrName RdrNamePat
76 type RdrNameMatch               = Match                 Fake Fake RdrName RdrNamePat
77 type RdrNameMonoBinds           = MonoBinds             Fake Fake RdrName RdrNamePat
78 type RdrNameMonoType            = MonoType              RdrName
79 type RdrNamePat                 = InPat                 RdrName
80 type RdrNamePolyType            = PolyType              RdrName
81 type RdrNameQual                = Qual                  Fake Fake RdrName RdrNamePat
82 type RdrNameSig                 = Sig                   RdrName
83 type RdrNameSpecInstSig         = SpecInstSig           RdrName
84 type RdrNameStmt                = Stmt                  Fake Fake RdrName RdrNamePat
85 type RdrNameTyDecl              = TyDecl                RdrName
86
87 type RdrNameClassOpPragmas      = ClassOpPragmas        RdrName
88 type RdrNameClassPragmas        = ClassPragmas          RdrName
89 type RdrNameDataPragmas         = DataPragmas           RdrName
90 type RdrNameGenPragmas          = GenPragmas            RdrName
91 type RdrNameInstancePragmas     = InstancePragmas       RdrName
92 type RdrNameCoreExpr            = UnfoldingCoreExpr     RdrName
93 \end{code}
94
95 %************************************************************************
96 %*                                                                      *
97 \subsection{Grabbing importees and exportees}
98 %*                                                                      *
99 %************************************************************************
100
101 \begin{code}
102 getRawImportees :: [RdrNameIE] ->  [RdrName]
103 getRawExportees :: Maybe [RdrNameIE] -> ([(RdrName, ExportFlag)], [Module])
104
105 getRawImportees imps
106   = foldr do_imp [] imps
107   where
108     do_imp (IEVar n)         acc = n:acc
109     do_imp (IEThingAbs  n)   acc = n:acc
110     do_imp (IEThingWith n _) acc = n:acc
111     do_imp (IEThingAll  n)   acc = n:acc
112
113 getRawExportees Nothing     = ([], [])
114 getRawExportees (Just exps)
115   = foldr do_exp ([],[]) exps
116   where
117     do_exp (IEVar n)            (prs, mods) = ((n, ExportAll):prs, mods)
118     do_exp (IEThingAbs n)       (prs, mods) = ((n, ExportAbs):prs, mods)
119     do_exp (IEThingAll n)       (prs, mods) = ((n, ExportAll):prs, mods)
120     do_exp (IEThingWith n _)    (prs, mods) = ((n, ExportAll):prs, mods)
121     do_exp (IEModuleContents n) (prs, mods) = (prs, n : mods)
122 \end{code}