@@ -16,14 +16,18 @@ import qualified Desugar
16
16
#if __GLASGOW_HASKELL__ >= 706
17
17
import qualified DynFlags
18
18
#endif
19
+ #if __GLASGOW_HASKELL__ >= 708
20
+ import qualified HsExpr
21
+ #else
22
+ import qualified TcRnTypes
23
+ #endif
19
24
import qualified GHC
20
25
import qualified HscTypes
21
26
import qualified NameSet
22
27
import qualified Outputable
23
28
import qualified PprTyThing
24
29
import qualified Pretty
25
30
import qualified TcHsSyn
26
- import qualified TcRnTypes
27
31
28
32
getIdentifierInfo :: FilePath -> String -> GHC. Ghc (Either String String )
29
33
getIdentifierInfo file identifier =
@@ -127,21 +131,32 @@ getSrcSpan (GHC.RealSrcSpan spn) =
127
131
getSrcSpan _ = Nothing
128
132
129
133
getTypeLHsBind :: GHC. TypecheckedModule -> GHC. LHsBind GHC. Id -> GHC. Ghc (Maybe (GHC. SrcSpan , GHC. Type ))
134
+ #if __GLASGOW_HASKELL__ >= 708
135
+ getTypeLHsBind _ (GHC. L spn GHC. FunBind {GHC. fun_matches = grp}) = return $ Just (spn, HsExpr. mg_res_ty grp)
136
+ #else
130
137
getTypeLHsBind _ (GHC. L spn GHC. FunBind {GHC. fun_matches = GHC. MatchGroup _ typ}) = return $ Just (spn, typ)
138
+ #endif
131
139
getTypeLHsBind _ _ = return Nothing
132
140
133
141
getTypeLHsExpr :: GHC. TypecheckedModule -> GHC. LHsExpr GHC. Id -> GHC. Ghc (Maybe (GHC. SrcSpan , GHC. Type ))
142
+ #if __GLASGOW_HASKELL__ >= 708
143
+ getTypeLHsExpr _ e = do
144
+ #else
134
145
getTypeLHsExpr tcm e = do
146
+ #endif
135
147
hs_env <- GHC. getSession
148
+ #if __GLASGOW_HASKELL__ >= 708
149
+ (_, mbe) <- liftIO $ Desugar. deSugarExpr hs_env e
150
+ #else
151
+ let modu = GHC. ms_mod $ GHC. pm_mod_summary $ GHC. tm_parsed_module tcm
152
+ rn_env = TcRnTypes. tcg_rdr_env $ fst $ GHC. tm_internals_ tcm
153
+ ty_env = TcRnTypes. tcg_type_env $ fst $ GHC. tm_internals_ tcm
136
154
(_, mbe) <- liftIO $ Desugar. deSugarExpr hs_env modu rn_env ty_env e
155
+ #endif
137
156
return ()
138
157
case mbe of
139
158
Nothing -> return Nothing
140
159
Just expr -> return $ Just (GHC. getLoc e, CoreUtils. exprType expr)
141
- where
142
- modu = GHC. ms_mod $ GHC. pm_mod_summary $ GHC. tm_parsed_module tcm
143
- rn_env = TcRnTypes. tcg_rdr_env $ fst $ GHC. tm_internals_ tcm
144
- ty_env = TcRnTypes. tcg_type_env $ fst $ GHC. tm_internals_ tcm
145
160
146
161
getTypeLPat :: GHC. TypecheckedModule -> GHC. LPat GHC. Id -> GHC. Ghc (Maybe (GHC. SrcSpan , GHC. Type ))
147
162
getTypeLPat _ (GHC. L spn pat) = return $ Just (spn, TcHsSyn. hsPatType pat)
@@ -161,14 +176,22 @@ pretty dflags =
161
176
pretty :: GHC. Type -> String
162
177
pretty =
163
178
#endif
179
+ #if __GLASGOW_HASKELL__ >= 708
180
+ Pretty. showDoc Pretty. OneLineMode 0
181
+ #else
164
182
Pretty. showDocWith Pretty. OneLineMode
183
+ #endif
165
184
#if __GLASGOW_HASKELL__ >= 706
166
185
. Outputable. withPprStyleDoc dflags
167
186
#else
168
187
. Outputable. withPprStyleDoc
169
188
#endif
170
189
(Outputable. mkUserStyle Outputable. neverQualify Outputable. AllTheWay )
190
+ #if __GLASGOW_HASKELL__ >= 708
191
+ . PprTyThing. pprTypeForUser
192
+ #else
171
193
. PprTyThing. pprTypeForUser False
194
+ #endif
172
195
173
196
------------------------------------------------------------------------------
174
197
-- The following was taken from 'ghc-syb-utils'
@@ -188,7 +211,11 @@ everythingStaged stage k z f x
188
211
| (const False `extQ` postTcType `extQ` fixity `extQ` nameSet) x = z
189
212
| otherwise = foldl k (f x) (gmapQ (everythingStaged stage k z f) x)
190
213
where nameSet = const (stage `elem` [Parser ,TypeChecker ]) :: NameSet. NameSet -> Bool
214
+ #if __GLASGOW_HASKELL__ >= 710
215
+ postTcType = const (stage< TypeChecker ) :: GHC. PostTc GHC. Id GHC. Type -> Bool
216
+ #else
191
217
postTcType = const (stage< TypeChecker ) :: GHC. PostTcType -> Bool
218
+ #endif
192
219
fixity = const (stage< Renamer ) :: GHC. Fixity -> Bool
193
220
194
221
------------------------------------------------------------------------------
@@ -198,16 +225,25 @@ everythingStaged stage k z f x
198
225
infoThing :: String -> GHC. Ghc String
199
226
infoThing str = do
200
227
names <- GHC. parseName str
228
+ #if __GLASGOW_HASKELL__ >= 708
229
+ mb_stuffs <- mapM (GHC. getInfo False ) names
230
+ let filtered = filterOutChildren (\ (t,_f,_i,_) -> t) (catMaybes mb_stuffs)
231
+ #else
201
232
mb_stuffs <- mapM GHC. getInfo names
202
233
let filtered = filterOutChildren (\ (t,_f,_i) -> t) (catMaybes mb_stuffs)
234
+ #endif
203
235
unqual <- GHC. getPrintUnqual
204
236
#if __GLASGOW_HASKELL__ >= 706
205
237
dflags <- DynFlags. getDynFlags
206
238
return $ Outputable. showSDocForUser dflags unqual $
207
239
#else
208
240
return $ Outputable. showSDocForUser unqual $
209
241
#endif
242
+ #if __GLASGOW_HASKELL__ >= 708
243
+ Outputable. vcat (intersperse (Outputable. text " " ) $ map pprInfo filtered)
244
+ #else
210
245
Outputable. vcat (intersperse (Outputable. text " " ) $ map (pprInfo False ) filtered)
246
+ #endif
211
247
212
248
-- Filter out names whose parent is also there Good
213
249
-- example is '[]', which is both a type and data
@@ -225,13 +261,19 @@ filterOutChildren get_thing xs
225
261
Just p -> GHC. getName p `NameSet.elemNameSet` all_names
226
262
Nothing -> False
227
263
228
- #if __GLASGOW_HASKELL__ >= 706
264
+ #if __GLASGOW_HASKELL__ >= 708
265
+ pprInfo :: (HscTypes. TyThing , GHC. Fixity , [GHC. ClsInst ], [GHC. FamInst ]) -> Outputable. SDoc
266
+ pprInfo (thing, fixity, insts, _) =
267
+ PprTyThing. pprTyThingInContextLoc thing
268
+ #elif __GLASGOW_HASKELL__ >= 706
229
269
pprInfo :: PprTyThing. PrintExplicitForalls -> (HscTypes. TyThing , GHC. Fixity , [GHC. ClsInst ]) -> Outputable. SDoc
270
+ pprInfo pefas (thing, fixity, insts) =
271
+ PprTyThing. pprTyThingInContextLoc pefas thing
230
272
#else
231
273
pprInfo :: PprTyThing. PrintExplicitForalls -> (HscTypes. TyThing , GHC. Fixity , [GHC. Instance ]) -> Outputable. SDoc
232
- #endif
233
274
pprInfo pefas (thing, fixity, insts) =
234
275
PprTyThing. pprTyThingInContextLoc pefas thing
276
+ #endif
235
277
Outputable. $$ show_fixity fixity
236
278
Outputable. $$ Outputable. vcat (map GHC. pprInstance insts)
237
279
where
0 commit comments