1 -----------------------------------------------------------------------------
3 -- (c) The University of Glasgow 2006
5 -- The purpose of this module is to transform an HsExpr into a CoreExpr which
6 -- when evaluated, returns a (Meta.Q Meta.Exp) computation analogous to the
7 -- input HsExpr. We do this in the DsM monad, which supplies access to
8 -- CoreExpr's of the "smart constructors" of the Meta.Exp datatype.
10 -- It also defines a bunch of knownKeyNames, in the same way as is done
11 -- in prelude/PrelNames. It's much more convenient to do it here, becuase
12 -- otherwise we have to recompile PrelNames whenever we add a Name, which is
13 -- a Royal Pain (triggers other recompilation).
14 -----------------------------------------------------------------------------
16 module DsMeta( dsBracket,
17 templateHaskellNames, qTyConName, nameTyConName,
18 liftName, liftStringName, expQTyConName, patQTyConName, decQTyConName, typeQTyConName,
19 decTyConName, typeTyConName, mkNameG_dName, mkNameG_vName, mkNameG_tcName,
20 quoteExpName, quotePatName
23 #include "HsVersions.h"
25 import {-# SOURCE #-} DsExpr ( dsExpr )
30 import qualified Language.Haskell.TH as TH
35 -- To avoid clashes with DsMeta.varName we must make a local alias for
36 -- OccName.varName we do this by removing varName from the import of
37 -- OccName above, making a qualified instance of OccName and using
38 -- OccNameAlias.varName where varName ws previously used in this file.
39 import qualified OccName( isDataOcc, isVarOcc, isTcOcc, varName, tcName )
43 import Name hiding( isVarOcc, isTcOcc, varName, tcName )
64 -----------------------------------------------------------------------------
65 dsBracket :: HsBracket Name -> [PendingSplice] -> DsM CoreExpr
66 -- Returns a CoreExpr of type TH.ExpQ
67 -- The quoted thing is parameterised over Name, even though it has
68 -- been type checked. We don't want all those type decorations!
70 dsBracket brack splices
71 = dsExtendMetaEnv new_bit (do_brack brack)
73 new_bit = mkNameEnv [(n, Splice (unLoc e)) | (n,e) <- splices]
75 do_brack (VarBr n) = do { MkC e1 <- lookupOcc n ; return e1 }
76 do_brack (ExpBr e) = do { MkC e1 <- repLE e ; return e1 }
77 do_brack (PatBr p) = do { MkC p1 <- repLP p ; return p1 }
78 do_brack (TypBr t) = do { MkC t1 <- repLTy t ; return t1 }
79 do_brack (DecBr ds) = do { MkC ds1 <- repTopDs ds ; return ds1 }
81 {- -------------- Examples --------------------
85 gensym (unpackString "x"#) `bindQ` \ x1::String ->
86 lam (pvar x1) (var x1)
89 [| \x -> $(f [| x |]) |]
91 gensym (unpackString "x"#) `bindQ` \ x1::String ->
92 lam (pvar x1) (f (var x1))
96 -------------------------------------------------------
98 -------------------------------------------------------
100 repTopDs :: HsGroup Name -> DsM (Core (TH.Q [TH.Dec]))
102 = do { let { bndrs = map unLoc (groupBinders group) } ;
103 ss <- mkGenSyms bndrs ;
105 -- Bind all the names mainly to avoid repeated use of explicit strings.
107 -- do { t :: String <- genSym "T" ;
108 -- return (Data t [] ...more t's... }
109 -- The other important reason is that the output must mention
110 -- only "T", not "Foo:T" where Foo is the current module
113 decls <- addBinds ss (do {
114 val_ds <- rep_val_binds (hs_valds group) ;
115 tycl_ds <- mapM repTyClD (hs_tyclds group) ;
116 inst_ds <- mapM repInstD' (hs_instds group) ;
117 for_ds <- mapM repForD (hs_fords group) ;
119 return (de_loc $ sort_by_loc $ val_ds ++ catMaybes tycl_ds ++ inst_ds ++ for_ds) }) ;
121 decl_ty <- lookupType decQTyConName ;
122 let { core_list = coreList' decl_ty decls } ;
124 dec_ty <- lookupType decTyConName ;
125 q_decs <- repSequenceQ dec_ty core_list ;
127 wrapNongenSyms ss q_decs
128 -- Do *not* gensym top-level binders
131 groupBinders :: HsGroup Name -> [Located Name]
132 groupBinders (HsGroup { hs_valds = val_decls, hs_tyclds = tycl_decls,
133 hs_instds = inst_decls, hs_fords = foreign_decls })
134 -- Collect the binders of a Group
135 = collectHsValBinders val_decls ++
136 [n | d <- tycl_decls ++ assoc_tycl_decls, n <- tyClDeclNames (unLoc d)] ++
137 [n | L _ (ForeignImport n _ _) <- foreign_decls]
139 assoc_tycl_decls = concat [ats | L _ (InstDecl _ _ _ ats) <- inst_decls]
142 {- Note [Binders and occurrences]
143 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
144 When we desugar [d| data T = MkT |]
146 Data "T" [] [Con "MkT" []] []
148 Data "Foo:T" [] [Con "Foo:MkT" []] []
149 That is, the new data decl should fit into whatever new module it is
150 asked to fit in. We do *not* clone, though; no need for this:
157 then we must desugar to
158 foo = Data "Foo:T" [] [Con "Foo:MkT" []] []
160 So in repTopDs we bring the binders into scope with mkGenSyms and addBinds.
161 And we use lookupOcc, rather than lookupBinder
162 in repTyClD and repC.
166 repTyClD :: LTyClDecl Name -> DsM (Maybe (SrcSpan, Core TH.DecQ))
168 repTyClD tydecl@(L _ (TyFamily {}))
169 = repTyFamily tydecl addTyVarBinds
171 repTyClD (L loc (TyData { tcdND = DataType, tcdCtxt = cxt,
172 tcdLName = tc, tcdTyVars = tvs, tcdTyPats = opt_tys,
173 tcdCons = cons, tcdDerivs = mb_derivs }))
174 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
175 ; dec <- addTyVarBinds tvs $ \bndrs ->
176 do { cxt1 <- repLContext cxt
177 ; opt_tys1 <- maybeMapM repLTys opt_tys -- only for family insts
178 ; opt_tys2 <- maybeMapM (coreList typeQTyConName) opt_tys1
179 ; cons1 <- mapM repC cons
180 ; cons2 <- coreList conQTyConName cons1
181 ; derivs1 <- repDerivs mb_derivs
182 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
183 ; repData cxt1 tc1 bndrs1 opt_tys2 cons2 derivs1
185 ; return $ Just (loc, dec)
188 repTyClD (L loc (TyData { tcdND = NewType, tcdCtxt = cxt,
189 tcdLName = tc, tcdTyVars = tvs, tcdTyPats = opt_tys,
190 tcdCons = [con], tcdDerivs = mb_derivs }))
191 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
192 ; dec <- addTyVarBinds tvs $ \bndrs ->
193 do { cxt1 <- repLContext cxt
194 ; opt_tys1 <- maybeMapM repLTys opt_tys -- only for family insts
195 ; opt_tys2 <- maybeMapM (coreList typeQTyConName) opt_tys1
197 ; derivs1 <- repDerivs mb_derivs
198 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
199 ; repNewtype cxt1 tc1 bndrs1 opt_tys2 con1 derivs1
201 ; return $ Just (loc, dec)
204 repTyClD (L loc (TySynonym { tcdLName = tc, tcdTyVars = tvs, tcdTyPats = opt_tys,
206 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
207 ; dec <- addTyVarBinds tvs $ \bndrs ->
208 do { opt_tys1 <- maybeMapM repLTys opt_tys -- only for family insts
209 ; opt_tys2 <- maybeMapM (coreList typeQTyConName) opt_tys1
211 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
212 ; repTySyn tc1 bndrs1 opt_tys2 ty1
214 ; return (Just (loc, dec))
217 repTyClD (L loc (ClassDecl { tcdCtxt = cxt, tcdLName = cls,
218 tcdTyVars = tvs, tcdFDs = fds,
219 tcdSigs = sigs, tcdMeths = meth_binds,
221 = do { cls1 <- lookupLOcc cls -- See note [Binders and occurrences]
222 ; dec <- addTyVarBinds tvs $ \bndrs ->
223 do { cxt1 <- repLContext cxt
224 ; sigs1 <- rep_sigs sigs
225 ; binds1 <- rep_binds meth_binds
226 ; fds1 <- repLFunDeps fds
227 ; ats1 <- repLAssocFamilys ats
228 ; decls1 <- coreList decQTyConName (ats1 ++ sigs1 ++ binds1)
229 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
230 ; repClass cxt1 cls1 bndrs1 fds1 decls1
232 ; return $ Just (loc, dec)
236 repTyClD (L loc d) = putSrcSpanDs loc $
237 do { warnDs (hang ds_msg 4 (ppr d))
240 -- The type variables in the head of families are treated differently when the
241 -- family declaration is associated. In that case, they are usage, not binding
244 repTyFamily :: LTyClDecl Name
245 -> ProcessTyVarBinds TH.Dec
246 -> DsM (Maybe (SrcSpan, Core TH.DecQ))
247 repTyFamily (L loc (TyFamily { tcdFlavour = flavour,
248 tcdLName = tc, tcdTyVars = tvs,
249 tcdKind = opt_kind }))
251 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
252 ; dec <- tyVarBinds tvs $ \bndrs ->
253 do { flav <- repFamilyFlavour flavour
254 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
256 Nothing -> repFamilyNoKind flav tc1 bndrs1
257 Just ki -> do { ki1 <- repKind ki
258 ; repFamilyKind flav tc1 bndrs1 ki1
261 ; return $ Just (loc, dec)
263 repTyFamily _ _ = panic "DsMeta.repTyFamily: internal error"
267 repLFunDeps :: [Located (FunDep Name)] -> DsM (Core [TH.FunDep])
268 repLFunDeps fds = do fds' <- mapM repLFunDep fds
269 fdList <- coreList funDepTyConName fds'
272 repLFunDep :: Located (FunDep Name) -> DsM (Core TH.FunDep)
273 repLFunDep (L _ (xs, ys)) = do xs' <- mapM lookupBinder xs
274 ys' <- mapM lookupBinder ys
275 xs_list <- coreList nameTyConName xs'
276 ys_list <- coreList nameTyConName ys'
277 repFunDep xs_list ys_list
279 -- represent family declaration flavours
281 repFamilyFlavour :: FamilyFlavour -> DsM (Core TH.FamFlavour)
282 repFamilyFlavour TypeFamily = rep2 typeFamName []
283 repFamilyFlavour DataFamily = rep2 dataFamName []
285 -- represent associated family declarations
287 repLAssocFamilys :: [LTyClDecl Name] -> DsM [Core TH.DecQ]
288 repLAssocFamilys = mapM repLAssocFamily
290 repLAssocFamily tydecl@(L _ (TyFamily {}))
291 = liftM (snd . fromJust) $ repTyFamily tydecl lookupTyVarBinds
292 repLAssocFamily tydecl
295 msg = ptext (sLit "Illegal associated declaration in class:") <+>
298 -- represent associated family instances
300 repLAssocFamInst :: [LTyClDecl Name] -> DsM [Core TH.DecQ]
301 repLAssocFamInst = liftM de_loc . mapMaybeM repTyClD
303 -- represent instance declarations
305 repInstD' :: LInstDecl Name -> DsM (SrcSpan, Core TH.DecQ)
306 repInstD' (L loc (InstDecl ty binds _ ats)) -- Ignore user pragmas for now
307 = do { i <- addTyVarBinds tvs $ \_ ->
308 -- We must bring the type variables into scope, so their
309 -- occurrences don't fail, even though the binders don't
310 -- appear in the resulting data structure
311 do { cxt1 <- repContext cxt
312 ; inst_ty1 <- repPredTy (HsClassP cls tys)
313 ; ss <- mkGenSyms (collectHsBindBinders binds)
314 ; binds1 <- addBinds ss (rep_binds binds)
315 ; ats1 <- repLAssocFamInst ats
316 ; decls1 <- coreList decQTyConName (ats1 ++ binds1)
317 ; decls2 <- wrapNongenSyms ss decls1
318 -- wrapNongenSyms: do not clone the class op names!
319 -- They must be called 'op' etc, not 'op34'
320 ; repInst cxt1 inst_ty1 (decls2)
324 (tvs, cxt, cls, tys) = splitHsInstDeclTy (unLoc ty)
326 repForD :: Located (ForeignDecl Name) -> DsM (SrcSpan, Core TH.DecQ)
327 repForD (L loc (ForeignImport name typ (CImport cc s ch cis)))
328 = do MkC name' <- lookupLOcc name
329 MkC typ' <- repLTy typ
330 MkC cc' <- repCCallConv cc
331 MkC s' <- repSafety s
332 cis' <- conv_cimportspec cis
333 MkC str <- coreStringLit $ static
334 ++ unpackFS ch ++ " "
336 dec <- rep2 forImpDName [cc', s', str, name', typ']
339 conv_cimportspec (CLabel cls) = notHandled "Foreign label" (doubleQuotes (ppr cls))
340 conv_cimportspec (CFunction DynamicTarget) = return "dynamic"
341 conv_cimportspec (CFunction (StaticTarget fs)) = return (unpackFS fs)
342 conv_cimportspec CWrapper = return "wrapper"
344 CFunction (StaticTarget _) -> "static "
346 repForD decl = notHandled "Foreign declaration" (ppr decl)
348 repCCallConv :: CCallConv -> DsM (Core TH.Callconv)
349 repCCallConv CCallConv = rep2 cCallName []
350 repCCallConv StdCallConv = rep2 stdCallName []
351 repCCallConv callConv = notHandled "repCCallConv" (ppr callConv)
353 repSafety :: Safety -> DsM (Core TH.Safety)
354 repSafety PlayRisky = rep2 unsafeName []
355 repSafety (PlaySafe False) = rep2 safeName []
356 repSafety (PlaySafe True) = rep2 threadsafeName []
359 ds_msg = ptext (sLit "Cannot desugar this Template Haskell declaration:")
361 -------------------------------------------------------
363 -------------------------------------------------------
365 repC :: LConDecl Name -> DsM (Core TH.ConQ)
366 repC (L _ (ConDecl { con_name = con, con_qvars = [], con_cxt = L _ []
367 , con_details = details, con_res = ResTyH98 }))
368 = do { con1 <- lookupLOcc con -- See note [Binders and occurrences]
369 ; repConstr con1 details
371 repC (L loc con_decl@(ConDecl { con_qvars = tvs, con_cxt = L cloc ctxt, con_res = ResTyH98 }))
372 = addTyVarBinds tvs $ \bndrs ->
373 do { c' <- repC (L loc (con_decl { con_qvars = [], con_cxt = L cloc [] }))
374 ; ctxt' <- repContext ctxt
375 ; bndrs' <- coreList tyVarBndrTyConName bndrs
376 ; rep2 forallCName [unC bndrs', unC ctxt', unC c']
378 repC (L loc con_decl) -- GADTs
380 notHandled "GADT declaration" (ppr con_decl)
382 repBangTy :: LBangType Name -> DsM (Core (TH.StrictTypeQ))
386 rep2 strictTypeName [s, t]
388 (str, ty') = case ty of
389 L _ (HsBangTy _ ty) -> (isStrictName, ty)
390 _ -> (notStrictName, ty)
392 -------------------------------------------------------
394 -------------------------------------------------------
396 repDerivs :: Maybe [LHsType Name] -> DsM (Core [TH.Name])
397 repDerivs Nothing = coreList nameTyConName []
398 repDerivs (Just ctxt)
399 = do { strs <- mapM rep_deriv ctxt ;
400 coreList nameTyConName strs }
402 rep_deriv :: LHsType Name -> DsM (Core TH.Name)
403 -- Deriving clauses must have the simple H98 form
404 rep_deriv (L _ (HsPredTy (HsClassP cls []))) = lookupOcc cls
405 rep_deriv other = notHandled "Non-H98 deriving clause" (ppr other)
408 -------------------------------------------------------
409 -- Signatures in a class decl, or a group of bindings
410 -------------------------------------------------------
412 rep_sigs :: [LSig Name] -> DsM [Core TH.DecQ]
413 rep_sigs sigs = do locs_cores <- rep_sigs' sigs
414 return $ de_loc $ sort_by_loc locs_cores
416 rep_sigs' :: [LSig Name] -> DsM [(SrcSpan, Core TH.DecQ)]
417 -- We silently ignore ones we don't recognise
418 rep_sigs' sigs = do { sigs1 <- mapM rep_sig sigs ;
419 return (concat sigs1) }
421 rep_sig :: LSig Name -> DsM [(SrcSpan, Core TH.DecQ)]
423 -- Empty => Too hard, signature ignored
424 rep_sig (L loc (TypeSig nm ty)) = rep_proto nm ty loc
425 rep_sig (L loc (InlineSig nm ispec)) = rep_inline nm ispec loc
426 rep_sig (L loc (SpecSig nm ty ispec)) = rep_specialise nm ty ispec loc
427 rep_sig _ = return []
429 rep_proto :: Located Name -> LHsType Name -> SrcSpan
430 -> DsM [(SrcSpan, Core TH.DecQ)]
432 = do { nm1 <- lookupLOcc nm
434 ; sig <- repProto nm1 ty1
435 ; return [(loc, sig)]
438 rep_inline :: Located Name
439 -> InlinePragma -- Never defaultInlinePragma
441 -> DsM [(SrcSpan, Core TH.DecQ)]
442 rep_inline nm ispec loc
443 = do { nm1 <- lookupLOcc nm
444 ; ispec1 <- rep_InlinePrag ispec
445 ; pragma <- repPragInl nm1 ispec1
446 ; return [(loc, pragma)]
449 rep_specialise :: Located Name -> LHsType Name -> InlinePragma -> SrcSpan
450 -> DsM [(SrcSpan, Core TH.DecQ)]
451 rep_specialise nm ty ispec loc
452 = do { nm1 <- lookupLOcc nm
454 ; pragma <- if isDefaultInlinePragma ispec
455 then repPragSpec nm1 ty1 -- SPECIALISE
456 else do { ispec1 <- rep_InlinePrag ispec -- SPECIALISE INLINE
457 ; repPragSpecInl nm1 ty1 ispec1 }
458 ; return [(loc, pragma)]
461 -- Extract all the information needed to build a TH.InlinePrag
463 rep_InlinePrag :: InlinePragma -- Never defaultInlinePragma
464 -> DsM (Core TH.InlineSpecQ)
465 rep_InlinePrag (InlinePragma { inl_act = activation, inl_rule = match, inl_inline = inline })
466 | Nothing <- activation1
467 = repInlineSpecNoPhase inline1 match1
468 | Just (flag, phase) <- activation1
469 = repInlineSpecPhase inline1 match1 flag phase
470 | otherwise = {- unreachable, but shuts up -W -} panic "rep_InlineSpec"
472 match1 = coreBool (rep_RuleMatchInfo match)
473 activation1 = rep_Activation activation
474 inline1 = coreBool inline
476 rep_RuleMatchInfo FunLike = False
477 rep_RuleMatchInfo ConLike = True
479 rep_Activation NeverActive = Nothing -- We never have NOINLINE/AlwaysActive
480 rep_Activation AlwaysActive = Nothing -- or INLINE/NeverActive
481 rep_Activation (ActiveBefore phase) = Just (coreBool False,
482 MkC $ mkIntExprInt phase)
483 rep_Activation (ActiveAfter phase) = Just (coreBool True,
484 MkC $ mkIntExprInt phase)
487 -------------------------------------------------------
489 -------------------------------------------------------
491 -- We process type variable bindings in two ways, either by generating fresh
492 -- names or looking up existing names. The difference is crucial for type
493 -- families, depending on whether they are associated or not.
495 type ProcessTyVarBinds a =
496 [LHsTyVarBndr Name] -- the binders to be added
497 -> ([Core TH.TyVarBndr] -> DsM (Core (TH.Q a))) -- action in the ext env
498 -> DsM (Core (TH.Q a))
500 -- gensym a list of type variables and enter them into the meta environment;
501 -- the computations passed as the second argument is executed in that extended
502 -- meta environment and gets the *new* names on Core-level as an argument
504 addTyVarBinds :: ProcessTyVarBinds a
505 addTyVarBinds tvs m =
507 let names = hsLTyVarNames tvs
508 mkWithKinds = map repTyVarBndrWithKind tvs
509 freshNames <- mkGenSyms names
510 term <- addBinds freshNames $ do
511 bndrs <- mapM lookupBinder names
512 kindedBndrs <- zipWithM ($) mkWithKinds bndrs
514 wrapGenSyns freshNames term
516 -- Look up a list of type variables; the computations passed as the second
517 -- argument gets the *new* names on Core-level as an argument
519 lookupTyVarBinds :: ProcessTyVarBinds a
520 lookupTyVarBinds tvs m =
522 let names = hsLTyVarNames tvs
523 mkWithKinds = map repTyVarBndrWithKind tvs
524 bndrs <- mapM lookupBinder names
525 kindedBndrs <- zipWithM ($) mkWithKinds bndrs
528 -- Produce kinded binder constructors from the Haskell tyvar binders
530 repTyVarBndrWithKind :: LHsTyVarBndr Name
531 -> Core TH.Name -> DsM (Core TH.TyVarBndr)
532 repTyVarBndrWithKind (L _ (UserTyVar _)) = repPlainTV
533 repTyVarBndrWithKind (L _ (KindedTyVar _ ki)) =
534 \nm -> repKind ki >>= repKindedTV nm
536 -- represent a type context
538 repLContext :: LHsContext Name -> DsM (Core TH.CxtQ)
539 repLContext (L _ ctxt) = repContext ctxt
541 repContext :: HsContext Name -> DsM (Core TH.CxtQ)
543 preds <- mapM repLPred ctxt
544 predList <- coreList predQTyConName preds
547 -- represent a type predicate
549 repLPred :: LHsPred Name -> DsM (Core TH.PredQ)
550 repLPred (L _ p) = repPred p
552 repPred :: HsPred Name -> DsM (Core TH.PredQ)
553 repPred (HsClassP cls tys)
555 cls1 <- lookupOcc cls
557 tys2 <- coreList typeQTyConName tys1
559 repPred (HsEqualP tyleft tyright)
561 tyleft1 <- repLTy tyleft
562 tyright1 <- repLTy tyright
563 repEqualP tyleft1 tyright1
564 repPred p@(HsIParam _ _) = notHandled "Implicit parameter constraint" (ppr p)
566 repPredTy :: HsPred Name -> DsM (Core TH.TypeQ)
567 repPredTy (HsClassP cls tys)
569 tcon <- repTy (HsTyVar cls)
572 repPredTy _ = panic "DsMeta.repPredTy: unexpected equality: internal error"
574 -- yield the representation of a list of types
576 repLTys :: [LHsType Name] -> DsM [Core TH.TypeQ]
577 repLTys tys = mapM repLTy tys
581 repLTy :: LHsType Name -> DsM (Core TH.TypeQ)
582 repLTy (L _ ty) = repTy ty
584 repTy :: HsType Name -> DsM (Core TH.TypeQ)
585 repTy (HsForAllTy _ tvs ctxt ty) =
586 addTyVarBinds tvs $ \bndrs -> do
587 ctxt1 <- repLContext ctxt
589 bndrs1 <- coreList tyVarBndrTyConName bndrs
590 repTForall bndrs1 ctxt1 ty1
593 | isTvOcc (nameOccName n) = do
599 repTy (HsAppTy f a) = do
603 repTy (HsFunTy f a) = do
606 tcon <- repArrowTyCon
607 repTapps tcon [f1, a1]
608 repTy (HsListTy t) = do
612 repTy (HsPArrTy t) = do
614 tcon <- repTy (HsTyVar (tyConName parrTyCon))
616 repTy (HsTupleTy _ tys) = do
618 tcon <- repTupleTyCon (length tys)
620 repTy (HsOpTy ty1 n ty2) = repLTy ((nlHsTyVar (unLoc n) `nlHsAppTy` ty1)
622 repTy (HsParTy t) = repLTy t
623 repTy (HsPredTy pred) = repPredTy pred
624 repTy (HsKindSig t k) = do
628 repTy (HsSpliceTy splice) = repSplice splice
629 repTy ty@(HsNumTy _) = notHandled "Number types (for generics)" (ppr ty)
630 repTy ty = notHandled "Exotic form of type" (ppr ty)
634 repKind :: Kind -> DsM (Core TH.Kind)
636 = do { let (kis, ki') = splitKindFunTys ki
637 ; kis_rep <- mapM repKind kis
638 ; ki'_rep <- repNonArrowKind ki'
639 ; foldlM repArrowK ki'_rep kis_rep
642 repNonArrowKind k | isLiftedTypeKind k = repStarK
643 | otherwise = notHandled "Exotic form of kind"
646 -----------------------------------------------------------------------------
648 -----------------------------------------------------------------------------
650 repSplice :: HsSplice Name -> DsM (Core a)
651 -- See Note [How brackets and nested splices are handled] in TcSplice
652 -- We return a CoreExpr of any old type; the context should know
653 repSplice (HsSplice n _)
654 = do { mb_val <- dsLookupMetaEnv n
656 Just (Splice e) -> do { e' <- dsExpr e
658 _ -> pprPanic "HsSplice" (ppr n) }
659 -- Should not happen; statically checked
661 -----------------------------------------------------------------------------
663 -----------------------------------------------------------------------------
665 repLEs :: [LHsExpr Name] -> DsM (Core [TH.ExpQ])
666 repLEs es = do { es' <- mapM repLE es ;
667 coreList expQTyConName es' }
669 -- FIXME: some of these panics should be converted into proper error messages
670 -- unless we can make sure that constructs, which are plainly not
671 -- supported in TH already lead to error messages at an earlier stage
672 repLE :: LHsExpr Name -> DsM (Core TH.ExpQ)
673 repLE (L loc e) = putSrcSpanDs loc (repE e)
675 repE :: HsExpr Name -> DsM (Core TH.ExpQ)
677 do { mb_val <- dsLookupMetaEnv x
679 Nothing -> do { str <- globalVar x
680 ; repVarOrCon x str }
681 Just (Bound y) -> repVarOrCon x (coreVar y)
682 Just (Splice e) -> do { e' <- dsExpr e
683 ; return (MkC e') } }
684 repE e@(HsIPVar _) = notHandled "Implicit parameters" (ppr e)
686 -- Remember, we're desugaring renamer output here, so
687 -- HsOverlit can definitely occur
688 repE (HsOverLit l) = do { a <- repOverloadedLiteral l; repLit a }
689 repE (HsLit l) = do { a <- repLiteral l; repLit a }
690 repE (HsLam (MatchGroup [m] _)) = repLambda m
691 repE (HsApp x y) = do {a <- repLE x; b <- repLE y; repApp a b}
693 repE (OpApp e1 op _ e2) =
694 do { arg1 <- repLE e1;
697 repInfixApp arg1 the_op arg2 }
698 repE (NegApp x _) = do
700 negateVar <- lookupOcc negateName >>= repVar
702 repE (HsPar x) = repLE x
703 repE (SectionL x y) = do { a <- repLE x; b <- repLE y; repSectionL a b }
704 repE (SectionR x y) = do { a <- repLE x; b <- repLE y; repSectionR a b }
705 repE (HsCase e (MatchGroup ms _)) = do { arg <- repLE e
706 ; ms2 <- mapM repMatchTup ms
707 ; repCaseE arg (nonEmptyCoreList ms2) }
708 repE (HsIf x y z) = do
713 repE (HsLet bs e) = do { (ss,ds) <- repBinds bs
714 ; e2 <- addBinds ss (repLE e)
717 -- FIXME: I haven't got the types here right yet
718 repE (HsDo DoExpr sts body _)
719 = do { (ss,zs) <- repLSts sts;
720 body' <- addBinds ss $ repLE body;
721 ret <- repNoBindSt body';
722 e <- repDoE (nonEmptyCoreList (zs ++ [ret]));
724 repE (HsDo ListComp sts body _)
725 = do { (ss,zs) <- repLSts sts;
726 body' <- addBinds ss $ repLE body;
727 ret <- repNoBindSt body';
728 e <- repComp (nonEmptyCoreList (zs ++ [ret]));
730 repE e@(HsDo _ _ _ _) = notHandled "mdo and [: :]" (ppr e)
731 repE (ExplicitList _ es) = do { xs <- repLEs es; repListExp xs }
732 repE e@(ExplicitPArr _ _) = notHandled "Parallel arrays" (ppr e)
733 repE e@(ExplicitTuple es boxed)
734 | not (isBoxed boxed) = notHandled "Unboxed tuples" (ppr e)
735 | not (all tupArgPresent es) = notHandled "Tuple sections" (ppr e)
736 | otherwise = do { xs <- repLEs [e | Present e <- es]; repTup xs }
738 repE (RecordCon c _ flds)
739 = do { x <- lookupLOcc c;
740 fs <- repFields flds;
742 repE (RecordUpd e flds _ _ _)
744 fs <- repFields flds;
747 repE (ExprWithTySig e ty) = do { e1 <- repLE e; t1 <- repLTy ty; repSigExp e1 t1 }
748 repE (ArithSeq _ aseq) =
750 From e -> do { ds1 <- repLE e; repFrom ds1 }
759 FromThenTo e1 e2 e3 -> do
763 repFromThenTo ds1 ds2 ds3
765 repE (HsSpliceE splice) = repSplice splice
766 repE e@(PArrSeq {}) = notHandled "Parallel arrays" (ppr e)
767 repE e@(HsCoreAnn {}) = notHandled "Core annotations" (ppr e)
768 repE e@(HsSCC {}) = notHandled "Cost centres" (ppr e)
769 repE e@(HsTickPragma {}) = notHandled "Tick Pragma" (ppr e)
770 repE e@(HsBracketOut {}) = notHandled "TH brackets" (ppr e)
771 repE e = notHandled "Expression form" (ppr e)
773 -----------------------------------------------------------------------------
774 -- Building representations of auxillary structures like Match, Clause, Stmt,
776 repMatchTup :: LMatch Name -> DsM (Core TH.MatchQ)
777 repMatchTup (L _ (Match [p] _ (GRHSs guards wheres))) =
778 do { ss1 <- mkGenSyms (collectPatBinders p)
779 ; addBinds ss1 $ do {
781 ; (ss2,ds) <- repBinds wheres
782 ; addBinds ss2 $ do {
783 ; gs <- repGuards guards
784 ; match <- repMatch p1 gs ds
785 ; wrapGenSyns (ss1++ss2) match }}}
786 repMatchTup _ = panic "repMatchTup: case alt with more than one arg"
788 repClauseTup :: LMatch Name -> DsM (Core TH.ClauseQ)
789 repClauseTup (L _ (Match ps _ (GRHSs guards wheres))) =
790 do { ss1 <- mkGenSyms (collectPatsBinders ps)
791 ; addBinds ss1 $ do {
793 ; (ss2,ds) <- repBinds wheres
794 ; addBinds ss2 $ do {
795 gs <- repGuards guards
796 ; clause <- repClause ps1 gs ds
797 ; wrapGenSyns (ss1++ss2) clause }}}
799 repGuards :: [LGRHS Name] -> DsM (Core TH.BodyQ)
800 repGuards [L _ (GRHS [] e)]
801 = do {a <- repLE e; repNormal a }
803 = do { zs <- mapM process other;
804 let {(xs, ys) = unzip zs};
805 gd <- repGuarded (nonEmptyCoreList ys);
806 wrapGenSyns (concat xs) gd }
808 process :: LGRHS Name -> DsM ([GenSymBind], (Core (TH.Q (TH.Guard, TH.Exp))))
809 process (L _ (GRHS [L _ (ExprStmt e1 _ _)] e2))
810 = do { x <- repLNormalGE e1 e2;
812 process (L _ (GRHS ss rhs))
813 = do (gs, ss') <- repLSts ss
814 rhs' <- addBinds gs $ repLE rhs
815 g <- repPatGE (nonEmptyCoreList ss') rhs'
818 repFields :: HsRecordBinds Name -> DsM (Core [TH.Q TH.FieldExp])
819 repFields (HsRecFields { rec_flds = flds })
820 = do { fnames <- mapM lookupLOcc (map hsRecFieldId flds)
821 ; es <- mapM repLE (map hsRecFieldArg flds)
822 ; fs <- zipWithM repFieldExp fnames es
823 ; coreList fieldExpQTyConName fs }
826 -----------------------------------------------------------------------------
827 -- Representing Stmt's is tricky, especially if bound variables
828 -- shadow each other. Consider: [| do { x <- f 1; x <- f x; g x } |]
829 -- First gensym new names for every variable in any of the patterns.
830 -- both static (x'1 and x'2), and dynamic ((gensym "x") and (gensym "y"))
831 -- if variables didn't shaddow, the static gensym wouldn't be necessary
832 -- and we could reuse the original names (x and x).
834 -- do { x'1 <- gensym "x"
835 -- ; x'2 <- gensym "x"
836 -- ; doE [ BindSt (pvar x'1) [| f 1 |]
837 -- , BindSt (pvar x'2) [| f x |]
838 -- , NoBindSt [| g x |]
842 -- The strategy is to translate a whole list of do-bindings by building a
843 -- bigger environment, and a bigger set of meta bindings
844 -- (like: x'1 <- gensym "x" ) and then combining these with the translations
845 -- of the expressions within the Do
847 -----------------------------------------------------------------------------
848 -- The helper function repSts computes the translation of each sub expression
849 -- and a bunch of prefix bindings denoting the dynamic renaming.
851 repLSts :: [LStmt Name] -> DsM ([GenSymBind], [Core TH.StmtQ])
852 repLSts stmts = repSts (map unLoc stmts)
854 repSts :: [Stmt Name] -> DsM ([GenSymBind], [Core TH.StmtQ])
855 repSts (BindStmt p e _ _ : ss) =
857 ; ss1 <- mkGenSyms (collectPatBinders p)
858 ; addBinds ss1 $ do {
860 ; (ss2,zs) <- repSts ss
861 ; z <- repBindSt p1 e2
862 ; return (ss1++ss2, z : zs) }}
863 repSts (LetStmt bs : ss) =
864 do { (ss1,ds) <- repBinds bs
866 ; (ss2,zs) <- addBinds ss1 (repSts ss)
867 ; return (ss1++ss2, z : zs) }
868 repSts (ExprStmt e _ _ : ss) =
870 ; z <- repNoBindSt e2
871 ; (ss2,zs) <- repSts ss
872 ; return (ss2, z : zs) }
873 repSts [] = return ([],[])
874 repSts other = notHandled "Exotic statement" (ppr other)
877 -----------------------------------------------------------
879 -----------------------------------------------------------
881 repBinds :: HsLocalBinds Name -> DsM ([GenSymBind], Core [TH.DecQ])
882 repBinds EmptyLocalBinds
883 = do { core_list <- coreList decQTyConName []
884 ; return ([], core_list) }
886 repBinds b@(HsIPBinds _) = notHandled "Implicit parameters" (ppr b)
888 repBinds (HsValBinds decs)
889 = do { let { bndrs = map unLoc (collectHsValBinders decs) }
890 -- No need to worrry about detailed scopes within
891 -- the binding group, because we are talking Names
892 -- here, so we can safely treat it as a mutually
894 ; ss <- mkGenSyms bndrs
895 ; prs <- addBinds ss (rep_val_binds decs)
896 ; core_list <- coreList decQTyConName
897 (de_loc (sort_by_loc prs))
898 ; return (ss, core_list) }
900 rep_val_binds :: HsValBinds Name -> DsM [(SrcSpan, Core TH.DecQ)]
901 -- Assumes: all the binders of the binding are alrady in the meta-env
902 rep_val_binds (ValBindsOut binds sigs)
903 = do { core1 <- rep_binds' (unionManyBags (map snd binds))
904 ; core2 <- rep_sigs' sigs
905 ; return (core1 ++ core2) }
906 rep_val_binds (ValBindsIn _ _)
907 = panic "rep_val_binds: ValBindsIn"
909 rep_binds :: LHsBinds Name -> DsM [Core TH.DecQ]
910 rep_binds binds = do { binds_w_locs <- rep_binds' binds
911 ; return (de_loc (sort_by_loc binds_w_locs)) }
913 rep_binds' :: LHsBinds Name -> DsM [(SrcSpan, Core TH.DecQ)]
914 rep_binds' binds = mapM rep_bind (bagToList binds)
916 rep_bind :: LHsBind Name -> DsM (SrcSpan, Core TH.DecQ)
917 -- Assumes: all the binders of the binding are alrady in the meta-env
919 -- Note GHC treats declarations of a variable (not a pattern)
920 -- e.g. x = g 5 as a Fun MonoBinds. This is indicated by a single match
921 -- with an empty list of patterns
922 rep_bind (L loc (FunBind { fun_id = fn,
923 fun_matches = MatchGroup [L _ (Match [] _ (GRHSs guards wheres))] _ }))
924 = do { (ss,wherecore) <- repBinds wheres
925 ; guardcore <- addBinds ss (repGuards guards)
926 ; fn' <- lookupLBinder fn
928 ; ans <- repVal p guardcore wherecore
929 ; ans' <- wrapGenSyns ss ans
930 ; return (loc, ans') }
932 rep_bind (L loc (FunBind { fun_id = fn, fun_matches = MatchGroup ms _ }))
933 = do { ms1 <- mapM repClauseTup ms
934 ; fn' <- lookupLBinder fn
935 ; ans <- repFun fn' (nonEmptyCoreList ms1)
936 ; return (loc, ans) }
938 rep_bind (L loc (PatBind { pat_lhs = pat, pat_rhs = GRHSs guards wheres }))
939 = do { patcore <- repLP pat
940 ; (ss,wherecore) <- repBinds wheres
941 ; guardcore <- addBinds ss (repGuards guards)
942 ; ans <- repVal patcore guardcore wherecore
943 ; ans' <- wrapGenSyns ss ans
944 ; return (loc, ans') }
946 rep_bind (L _ (VarBind { var_id = v, var_rhs = e}))
947 = do { v' <- lookupBinder v
950 ; patcore <- repPvar v'
951 ; empty_decls <- coreList decQTyConName []
952 ; ans <- repVal patcore x empty_decls
953 ; return (srcLocSpan (getSrcLoc v), ans) }
955 rep_bind (L _ (AbsBinds {})) = panic "rep_bind: AbsBinds"
957 -----------------------------------------------------------------------------
958 -- Since everything in a Bind is mutually recursive we need rename all
959 -- all the variables simultaneously. For example:
960 -- [| AndMonoBinds (f x = x + g 2) (g x = f 1 + 2) |] would translate to
961 -- do { f'1 <- gensym "f"
962 -- ; g'2 <- gensym "g"
963 -- ; [ do { x'3 <- gensym "x"; fun f'1 [pvar x'3] [| x + g2 |]},
964 -- do { x'4 <- gensym "x"; fun g'2 [pvar x'4] [| f 1 + 2 |]}
966 -- This requires collecting the bindings (f'1 <- gensym "f"), and the
967 -- environment ( f |-> f'1 ) from each binding, and then unioning them
968 -- together. As we do this we collect GenSymBinds's which represent the renamed
969 -- variables bound by the Bindings. In order not to lose track of these
970 -- representations we build a shadow datatype MB with the same structure as
971 -- MonoBinds, but which has slots for the representations
974 -----------------------------------------------------------------------------
975 -- GHC allows a more general form of lambda abstraction than specified
976 -- by Haskell 98. In particular it allows guarded lambda's like :
977 -- (\ x | even x -> 0 | odd x -> 1) at the moment we can't represent this in
978 -- Haskell Template's Meta.Exp type so we punt if it isn't a simple thing like
979 -- (\ p1 .. pn -> exp) by causing an error.
981 repLambda :: LMatch Name -> DsM (Core TH.ExpQ)
982 repLambda (L _ (Match ps _ (GRHSs [L _ (GRHS [] e)] EmptyLocalBinds)))
983 = do { let bndrs = collectPatsBinders ps ;
984 ; ss <- mkGenSyms bndrs
985 ; lam <- addBinds ss (
986 do { xs <- repLPs ps; body <- repLE e; repLam xs body })
987 ; wrapGenSyns ss lam }
989 repLambda (L _ m) = notHandled "Guarded labmdas" (pprMatch (LambdaExpr :: HsMatchContext Name) m)
992 -----------------------------------------------------------------------------
994 -- repP deals with patterns. It assumes that we have already
995 -- walked over the pattern(s) once to collect the binders, and
996 -- have extended the environment. So every pattern-bound
997 -- variable should already appear in the environment.
999 -- Process a list of patterns
1000 repLPs :: [LPat Name] -> DsM (Core [TH.PatQ])
1001 repLPs ps = do { ps' <- mapM repLP ps ;
1002 coreList patQTyConName ps' }
1004 repLP :: LPat Name -> DsM (Core TH.PatQ)
1005 repLP (L _ p) = repP p
1007 repP :: Pat Name -> DsM (Core TH.PatQ)
1008 repP (WildPat _) = repPwild
1009 repP (LitPat l) = do { l2 <- repLiteral l; repPlit l2 }
1010 repP (VarPat x) = do { x' <- lookupBinder x; repPvar x' }
1011 repP (LazyPat p) = do { p1 <- repLP p; repPtilde p1 }
1012 repP (BangPat p) = do { p1 <- repLP p; repPbang p1 }
1013 repP (AsPat x p) = do { x' <- lookupLBinder x; p1 <- repLP p; repPaspat x' p1 }
1014 repP (ParPat p) = repLP p
1015 repP (ListPat ps _) = do { qs <- repLPs ps; repPlist qs }
1016 repP (TuplePat ps _ _) = do { qs <- repLPs ps; repPtup qs }
1017 repP (ConPatIn dc details)
1018 = do { con_str <- lookupLOcc dc
1020 PrefixCon ps -> do { qs <- repLPs ps; repPcon con_str qs }
1021 RecCon rec -> do { let flds = rec_flds rec
1022 ; vs <- sequence $ map lookupLOcc (map hsRecFieldId flds)
1023 ; ps <- sequence $ map repLP (map hsRecFieldArg flds)
1024 ; fps <- zipWithM (\x y -> rep2 fieldPatName [unC x,unC y]) vs ps
1025 ; fps' <- coreList fieldPatQTyConName fps
1026 ; repPrec con_str fps' }
1027 InfixCon p1 p2 -> do { p1' <- repLP p1;
1029 repPinfix p1' con_str p2' }
1031 repP (NPat l Nothing _) = do { a <- repOverloadedLiteral l; repPlit a }
1032 repP p@(NPat _ (Just _) _) = notHandled "Negative overloaded patterns" (ppr p)
1033 repP p@(SigPatIn {}) = notHandled "Type signatures in patterns" (ppr p)
1034 -- The problem is to do with scoped type variables.
1035 -- To implement them, we have to implement the scoping rules
1036 -- here in DsMeta, and I don't want to do that today!
1037 -- do { p' <- repLP p; t' <- repLTy t; repPsig p' t' }
1038 -- repPsig :: Core TH.PatQ -> Core TH.TypeQ -> DsM (Core TH.PatQ)
1039 -- repPsig (MkC p) (MkC t) = rep2 sigPName [p, t]
1041 repP other = notHandled "Exotic pattern" (ppr other)
1043 ----------------------------------------------------------
1044 -- Declaration ordering helpers
1046 sort_by_loc :: [(SrcSpan, a)] -> [(SrcSpan, a)]
1047 sort_by_loc xs = sortBy comp xs
1048 where comp x y = compare (fst x) (fst y)
1050 de_loc :: [(a, b)] -> [b]
1053 ----------------------------------------------------------
1054 -- The meta-environment
1056 -- A name/identifier association for fresh names of locally bound entities
1057 type GenSymBind = (Name, Id) -- Gensym the string and bind it to the Id
1058 -- I.e. (x, x_id) means
1059 -- let x_id = gensym "x" in ...
1061 -- Generate a fresh name for a locally bound entity
1063 mkGenSyms :: [Name] -> DsM [GenSymBind]
1064 -- We can use the existing name. For example:
1065 -- [| \x_77 -> x_77 + x_77 |]
1067 -- do { x_77 <- genSym "x"; .... }
1068 -- We use the same x_77 in the desugared program, but with the type Bndr
1071 -- We do make it an Internal name, though (hence localiseName)
1073 -- Nevertheless, it's monadic because we have to generate nameTy
1074 mkGenSyms ns = do { var_ty <- lookupType nameTyConName
1075 ; return [(nm, mkLocalId (localiseName nm) var_ty) | nm <- ns] }
1078 addBinds :: [GenSymBind] -> DsM a -> DsM a
1079 -- Add a list of fresh names for locally bound entities to the
1080 -- meta environment (which is part of the state carried around
1081 -- by the desugarer monad)
1082 addBinds bs m = dsExtendMetaEnv (mkNameEnv [(n,Bound id) | (n,id) <- bs]) m
1084 -- Look up a locally bound name
1086 lookupLBinder :: Located Name -> DsM (Core TH.Name)
1087 lookupLBinder (L _ n) = lookupBinder n
1089 lookupBinder :: Name -> DsM (Core TH.Name)
1091 = do { mb_val <- dsLookupMetaEnv n;
1093 Just (Bound x) -> return (coreVar x)
1094 _ -> failWithDs msg }
1096 msg = ptext (sLit "DsMeta: failed binder lookup when desugaring a TH bracket:") <+> ppr n
1098 -- Look up a name that is either locally bound or a global name
1100 -- * If it is a global name, generate the "original name" representation (ie,
1101 -- the <module>:<name> form) for the associated entity
1103 lookupLOcc :: Located Name -> DsM (Core TH.Name)
1104 -- Lookup an occurrence; it can't be a splice.
1105 -- Use the in-scope bindings if they exist
1106 lookupLOcc (L _ n) = lookupOcc n
1108 lookupOcc :: Name -> DsM (Core TH.Name)
1110 = do { mb_val <- dsLookupMetaEnv n ;
1112 Nothing -> globalVar n
1113 Just (Bound x) -> return (coreVar x)
1114 Just (Splice _) -> pprPanic "repE:lookupOcc" (ppr n)
1117 lookupTvOcc :: Name -> DsM (Core TH.Name)
1118 -- Type variables can't be staged and are not lexically scoped in TH
1120 = do { mb_val <- dsLookupMetaEnv n ;
1122 Just (Bound x) -> return (coreVar x)
1126 msg = vcat [ ptext (sLit "Illegal lexically-scoped type variable") <+> quotes (ppr n)
1127 , ptext (sLit "Lexically scoped type variables are not supported by Template Haskell") ]
1129 globalVar :: Name -> DsM (Core TH.Name)
1130 -- Not bound by the meta-env
1131 -- Could be top-level; or could be local
1132 -- f x = $(g [| x |])
1133 -- Here the x will be local
1135 | isExternalName name
1136 = do { MkC mod <- coreStringLit name_mod
1137 ; MkC pkg <- coreStringLit name_pkg
1138 ; MkC occ <- occNameLit name
1139 ; rep2 mk_varg [pkg,mod,occ] }
1141 = do { MkC occ <- occNameLit name
1142 ; MkC uni <- coreIntLit (getKey (getUnique name))
1143 ; rep2 mkNameLName [occ,uni] }
1145 mod = ASSERT( isExternalName name) nameModule name
1146 name_mod = moduleNameString (moduleName mod)
1147 name_pkg = packageIdString (modulePackageId mod)
1148 name_occ = nameOccName name
1149 mk_varg | OccName.isDataOcc name_occ = mkNameG_dName
1150 | OccName.isVarOcc name_occ = mkNameG_vName
1151 | OccName.isTcOcc name_occ = mkNameG_tcName
1152 | otherwise = pprPanic "DsMeta.globalVar" (ppr name)
1154 lookupType :: Name -- Name of type constructor (e.g. TH.ExpQ)
1155 -> DsM Type -- The type
1156 lookupType tc_name = do { tc <- dsLookupTyCon tc_name ;
1157 return (mkTyConApp tc []) }
1159 wrapGenSyns :: [GenSymBind]
1160 -> Core (TH.Q a) -> DsM (Core (TH.Q a))
1161 -- wrapGenSyns [(nm1,id1), (nm2,id2)] y
1162 -- --> bindQ (gensym nm1) (\ id1 ->
1163 -- bindQ (gensym nm2 (\ id2 ->
1166 wrapGenSyns binds body@(MkC b)
1167 = do { var_ty <- lookupType nameTyConName
1170 [elt_ty] = tcTyConAppArgs (exprType b)
1171 -- b :: Q a, so we can get the type 'a' by looking at the
1172 -- argument type. NB: this relies on Q being a data/newtype,
1173 -- not a type synonym
1175 go _ [] = return body
1176 go var_ty ((name,id) : binds)
1177 = do { MkC body' <- go var_ty binds
1178 ; lit_str <- occNameLit name
1179 ; gensym_app <- repGensym lit_str
1180 ; repBindQ var_ty elt_ty
1181 gensym_app (MkC (Lam id body')) }
1183 -- Just like wrapGenSym, but don't actually do the gensym
1184 -- Instead use the existing name:
1185 -- let x = "x" in ...
1186 -- Only used for [Decl], and for the class ops in class
1187 -- and instance decls
1188 wrapNongenSyms :: [GenSymBind] -> Core a -> DsM (Core a)
1189 wrapNongenSyms binds (MkC body)
1190 = do { binds' <- mapM do_one binds ;
1191 return (MkC (mkLets binds' body)) }
1194 = do { MkC lit_str <- occNameLit name
1195 ; MkC var <- rep2 mkNameName [lit_str]
1196 ; return (NonRec id var) }
1198 occNameLit :: Name -> DsM (Core String)
1199 occNameLit n = coreStringLit (occNameString (nameOccName n))
1202 -- %*********************************************************************
1204 -- Constructing code
1206 -- %*********************************************************************
1208 -----------------------------------------------------------------------------
1209 -- PHANTOM TYPES for consistency. In order to make sure we do this correct
1210 -- we invent a new datatype which uses phantom types.
1212 newtype Core a = MkC CoreExpr
1213 unC :: Core a -> CoreExpr
1216 rep2 :: Name -> [ CoreExpr ] -> DsM (Core a)
1217 rep2 n xs = do { id <- dsLookupGlobalId n
1218 ; return (MkC (foldl App (Var id) xs)) }
1220 -- Then we make "repConstructors" which use the phantom types for each of the
1221 -- smart constructors of the Meta.Meta datatypes.
1224 -- %*********************************************************************
1226 -- The 'smart constructors'
1228 -- %*********************************************************************
1230 --------------- Patterns -----------------
1231 repPlit :: Core TH.Lit -> DsM (Core TH.PatQ)
1232 repPlit (MkC l) = rep2 litPName [l]
1234 repPvar :: Core TH.Name -> DsM (Core TH.PatQ)
1235 repPvar (MkC s) = rep2 varPName [s]
1237 repPtup :: Core [TH.PatQ] -> DsM (Core TH.PatQ)
1238 repPtup (MkC ps) = rep2 tupPName [ps]
1240 repPcon :: Core TH.Name -> Core [TH.PatQ] -> DsM (Core TH.PatQ)
1241 repPcon (MkC s) (MkC ps) = rep2 conPName [s, ps]
1243 repPrec :: Core TH.Name -> Core [(TH.Name,TH.PatQ)] -> DsM (Core TH.PatQ)
1244 repPrec (MkC c) (MkC rps) = rep2 recPName [c,rps]
1246 repPinfix :: Core TH.PatQ -> Core TH.Name -> Core TH.PatQ -> DsM (Core TH.PatQ)
1247 repPinfix (MkC p1) (MkC n) (MkC p2) = rep2 infixPName [p1, n, p2]
1249 repPtilde :: Core TH.PatQ -> DsM (Core TH.PatQ)
1250 repPtilde (MkC p) = rep2 tildePName [p]
1252 repPbang :: Core TH.PatQ -> DsM (Core TH.PatQ)
1253 repPbang (MkC p) = rep2 bangPName [p]
1255 repPaspat :: Core TH.Name -> Core TH.PatQ -> DsM (Core TH.PatQ)
1256 repPaspat (MkC s) (MkC p) = rep2 asPName [s, p]
1258 repPwild :: DsM (Core TH.PatQ)
1259 repPwild = rep2 wildPName []
1261 repPlist :: Core [TH.PatQ] -> DsM (Core TH.PatQ)
1262 repPlist (MkC ps) = rep2 listPName [ps]
1264 --------------- Expressions -----------------
1265 repVarOrCon :: Name -> Core TH.Name -> DsM (Core TH.ExpQ)
1266 repVarOrCon vc str | isDataOcc (nameOccName vc) = repCon str
1267 | otherwise = repVar str
1269 repVar :: Core TH.Name -> DsM (Core TH.ExpQ)
1270 repVar (MkC s) = rep2 varEName [s]
1272 repCon :: Core TH.Name -> DsM (Core TH.ExpQ)
1273 repCon (MkC s) = rep2 conEName [s]
1275 repLit :: Core TH.Lit -> DsM (Core TH.ExpQ)
1276 repLit (MkC c) = rep2 litEName [c]
1278 repApp :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1279 repApp (MkC x) (MkC y) = rep2 appEName [x,y]
1281 repLam :: Core [TH.PatQ] -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1282 repLam (MkC ps) (MkC e) = rep2 lamEName [ps, e]
1284 repTup :: Core [TH.ExpQ] -> DsM (Core TH.ExpQ)
1285 repTup (MkC es) = rep2 tupEName [es]
1287 repCond :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1288 repCond (MkC x) (MkC y) (MkC z) = rep2 condEName [x,y,z]
1290 repLetE :: Core [TH.DecQ] -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1291 repLetE (MkC ds) (MkC e) = rep2 letEName [ds, e]
1293 repCaseE :: Core TH.ExpQ -> Core [TH.MatchQ] -> DsM( Core TH.ExpQ)
1294 repCaseE (MkC e) (MkC ms) = rep2 caseEName [e, ms]
1296 repDoE :: Core [TH.StmtQ] -> DsM (Core TH.ExpQ)
1297 repDoE (MkC ss) = rep2 doEName [ss]
1299 repComp :: Core [TH.StmtQ] -> DsM (Core TH.ExpQ)
1300 repComp (MkC ss) = rep2 compEName [ss]
1302 repListExp :: Core [TH.ExpQ] -> DsM (Core TH.ExpQ)
1303 repListExp (MkC es) = rep2 listEName [es]
1305 repSigExp :: Core TH.ExpQ -> Core TH.TypeQ -> DsM (Core TH.ExpQ)
1306 repSigExp (MkC e) (MkC t) = rep2 sigEName [e,t]
1308 repRecCon :: Core TH.Name -> Core [TH.Q TH.FieldExp]-> DsM (Core TH.ExpQ)
1309 repRecCon (MkC c) (MkC fs) = rep2 recConEName [c,fs]
1311 repRecUpd :: Core TH.ExpQ -> Core [TH.Q TH.FieldExp] -> DsM (Core TH.ExpQ)
1312 repRecUpd (MkC e) (MkC fs) = rep2 recUpdEName [e,fs]
1314 repFieldExp :: Core TH.Name -> Core TH.ExpQ -> DsM (Core (TH.Q TH.FieldExp))
1315 repFieldExp (MkC n) (MkC x) = rep2 fieldExpName [n,x]
1317 repInfixApp :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1318 repInfixApp (MkC x) (MkC y) (MkC z) = rep2 infixAppName [x,y,z]
1320 repSectionL :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1321 repSectionL (MkC x) (MkC y) = rep2 sectionLName [x,y]
1323 repSectionR :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1324 repSectionR (MkC x) (MkC y) = rep2 sectionRName [x,y]
1326 ------------ Right hand sides (guarded expressions) ----
1327 repGuarded :: Core [TH.Q (TH.Guard, TH.Exp)] -> DsM (Core TH.BodyQ)
1328 repGuarded (MkC pairs) = rep2 guardedBName [pairs]
1330 repNormal :: Core TH.ExpQ -> DsM (Core TH.BodyQ)
1331 repNormal (MkC e) = rep2 normalBName [e]
1333 ------------ Guards ----
1334 repLNormalGE :: LHsExpr Name -> LHsExpr Name -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1335 repLNormalGE g e = do g' <- repLE g
1339 repNormalGE :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1340 repNormalGE (MkC g) (MkC e) = rep2 normalGEName [g, e]
1342 repPatGE :: Core [TH.StmtQ] -> Core TH.ExpQ -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1343 repPatGE (MkC ss) (MkC e) = rep2 patGEName [ss, e]
1345 ------------- Stmts -------------------
1346 repBindSt :: Core TH.PatQ -> Core TH.ExpQ -> DsM (Core TH.StmtQ)
1347 repBindSt (MkC p) (MkC e) = rep2 bindSName [p,e]
1349 repLetSt :: Core [TH.DecQ] -> DsM (Core TH.StmtQ)
1350 repLetSt (MkC ds) = rep2 letSName [ds]
1352 repNoBindSt :: Core TH.ExpQ -> DsM (Core TH.StmtQ)
1353 repNoBindSt (MkC e) = rep2 noBindSName [e]
1355 -------------- Range (Arithmetic sequences) -----------
1356 repFrom :: Core TH.ExpQ -> DsM (Core TH.ExpQ)
1357 repFrom (MkC x) = rep2 fromEName [x]
1359 repFromThen :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1360 repFromThen (MkC x) (MkC y) = rep2 fromThenEName [x,y]
1362 repFromTo :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1363 repFromTo (MkC x) (MkC y) = rep2 fromToEName [x,y]
1365 repFromThenTo :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1366 repFromThenTo (MkC x) (MkC y) (MkC z) = rep2 fromThenToEName [x,y,z]
1368 ------------ Match and Clause Tuples -----------
1369 repMatch :: Core TH.PatQ -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.MatchQ)
1370 repMatch (MkC p) (MkC bod) (MkC ds) = rep2 matchName [p, bod, ds]
1372 repClause :: Core [TH.PatQ] -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.ClauseQ)
1373 repClause (MkC ps) (MkC bod) (MkC ds) = rep2 clauseName [ps, bod, ds]
1375 -------------- Dec -----------------------------
1376 repVal :: Core TH.PatQ -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.DecQ)
1377 repVal (MkC p) (MkC b) (MkC ds) = rep2 valDName [p, b, ds]
1379 repFun :: Core TH.Name -> Core [TH.ClauseQ] -> DsM (Core TH.DecQ)
1380 repFun (MkC nm) (MkC b) = rep2 funDName [nm, b]
1382 repData :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1383 -> Maybe (Core [TH.TypeQ])
1384 -> Core [TH.ConQ] -> Core [TH.Name] -> DsM (Core TH.DecQ)
1385 repData (MkC cxt) (MkC nm) (MkC tvs) Nothing (MkC cons) (MkC derivs)
1386 = rep2 dataDName [cxt, nm, tvs, cons, derivs]
1387 repData (MkC cxt) (MkC nm) (MkC _) (Just (MkC tys)) (MkC cons) (MkC derivs)
1388 = rep2 dataInstDName [cxt, nm, tys, cons, derivs]
1390 repNewtype :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1391 -> Maybe (Core [TH.TypeQ])
1392 -> Core TH.ConQ -> Core [TH.Name] -> DsM (Core TH.DecQ)
1393 repNewtype (MkC cxt) (MkC nm) (MkC tvs) Nothing (MkC con) (MkC derivs)
1394 = rep2 newtypeDName [cxt, nm, tvs, con, derivs]
1395 repNewtype (MkC cxt) (MkC nm) (MkC _) (Just (MkC tys)) (MkC con) (MkC derivs)
1396 = rep2 newtypeInstDName [cxt, nm, tys, con, derivs]
1398 repTySyn :: Core TH.Name -> Core [TH.TyVarBndr]
1399 -> Maybe (Core [TH.TypeQ])
1400 -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1401 repTySyn (MkC nm) (MkC tvs) Nothing (MkC rhs)
1402 = rep2 tySynDName [nm, tvs, rhs]
1403 repTySyn (MkC nm) (MkC _) (Just (MkC tys)) (MkC rhs)
1404 = rep2 tySynInstDName [nm, tys, rhs]
1406 repInst :: Core TH.CxtQ -> Core TH.TypeQ -> Core [TH.DecQ] -> DsM (Core TH.DecQ)
1407 repInst (MkC cxt) (MkC ty) (MkC ds) = rep2 instanceDName [cxt, ty, ds]
1409 repClass :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1410 -> Core [TH.FunDep] -> Core [TH.DecQ]
1411 -> DsM (Core TH.DecQ)
1412 repClass (MkC cxt) (MkC cls) (MkC tvs) (MkC fds) (MkC ds)
1413 = rep2 classDName [cxt, cls, tvs, fds, ds]
1415 repPragInl :: Core TH.Name -> Core TH.InlineSpecQ -> DsM (Core TH.DecQ)
1416 repPragInl (MkC nm) (MkC ispec) = rep2 pragInlDName [nm, ispec]
1418 repPragSpec :: Core TH.Name -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1419 repPragSpec (MkC nm) (MkC ty) = rep2 pragSpecDName [nm, ty]
1421 repPragSpecInl :: Core TH.Name -> Core TH.TypeQ -> Core TH.InlineSpecQ
1422 -> DsM (Core TH.DecQ)
1423 repPragSpecInl (MkC nm) (MkC ty) (MkC ispec)
1424 = rep2 pragSpecInlDName [nm, ty, ispec]
1426 repFamilyNoKind :: Core TH.FamFlavour -> Core TH.Name -> Core [TH.TyVarBndr]
1427 -> DsM (Core TH.DecQ)
1428 repFamilyNoKind (MkC flav) (MkC nm) (MkC tvs)
1429 = rep2 familyNoKindDName [flav, nm, tvs]
1431 repFamilyKind :: Core TH.FamFlavour -> Core TH.Name -> Core [TH.TyVarBndr]
1433 -> DsM (Core TH.DecQ)
1434 repFamilyKind (MkC flav) (MkC nm) (MkC tvs) (MkC ki)
1435 = rep2 familyKindDName [flav, nm, tvs, ki]
1437 repInlineSpecNoPhase :: Core Bool -> Core Bool -> DsM (Core TH.InlineSpecQ)
1438 repInlineSpecNoPhase (MkC inline) (MkC conlike)
1439 = rep2 inlineSpecNoPhaseName [inline, conlike]
1441 repInlineSpecPhase :: Core Bool -> Core Bool -> Core Bool -> Core Int
1442 -> DsM (Core TH.InlineSpecQ)
1443 repInlineSpecPhase (MkC inline) (MkC conlike) (MkC beforeFrom) (MkC phase)
1444 = rep2 inlineSpecPhaseName [inline, conlike, beforeFrom, phase]
1446 repFunDep :: Core [TH.Name] -> Core [TH.Name] -> DsM (Core TH.FunDep)
1447 repFunDep (MkC xs) (MkC ys) = rep2 funDepName [xs, ys]
1449 repProto :: Core TH.Name -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1450 repProto (MkC s) (MkC ty) = rep2 sigDName [s, ty]
1452 repCtxt :: Core [TH.PredQ] -> DsM (Core TH.CxtQ)
1453 repCtxt (MkC tys) = rep2 cxtName [tys]
1455 repClassP :: Core TH.Name -> Core [TH.TypeQ] -> DsM (Core TH.PredQ)
1456 repClassP (MkC cla) (MkC tys) = rep2 classPName [cla, tys]
1458 repEqualP :: Core TH.TypeQ -> Core TH.TypeQ -> DsM (Core TH.PredQ)
1459 repEqualP (MkC ty1) (MkC ty2) = rep2 equalPName [ty1, ty2]
1461 repConstr :: Core TH.Name -> HsConDeclDetails Name
1462 -> DsM (Core TH.ConQ)
1463 repConstr con (PrefixCon ps)
1464 = do arg_tys <- mapM repBangTy ps
1465 arg_tys1 <- coreList strictTypeQTyConName arg_tys
1466 rep2 normalCName [unC con, unC arg_tys1]
1467 repConstr con (RecCon ips)
1468 = do arg_vs <- mapM lookupLOcc (map cd_fld_name ips)
1469 arg_tys <- mapM repBangTy (map cd_fld_type ips)
1470 arg_vtys <- zipWithM (\x y -> rep2 varStrictTypeName [unC x, unC y])
1472 arg_vtys' <- coreList varStrictTypeQTyConName arg_vtys
1473 rep2 recCName [unC con, unC arg_vtys']
1474 repConstr con (InfixCon st1 st2)
1475 = do arg1 <- repBangTy st1
1476 arg2 <- repBangTy st2
1477 rep2 infixCName [unC arg1, unC con, unC arg2]
1479 ------------ Types -------------------
1481 repTForall :: Core [TH.TyVarBndr] -> Core TH.CxtQ -> Core TH.TypeQ
1482 -> DsM (Core TH.TypeQ)
1483 repTForall (MkC tvars) (MkC ctxt) (MkC ty)
1484 = rep2 forallTName [tvars, ctxt, ty]
1486 repTvar :: Core TH.Name -> DsM (Core TH.TypeQ)
1487 repTvar (MkC s) = rep2 varTName [s]
1489 repTapp :: Core TH.TypeQ -> Core TH.TypeQ -> DsM (Core TH.TypeQ)
1490 repTapp (MkC t1) (MkC t2) = rep2 appTName [t1, t2]
1492 repTapps :: Core TH.TypeQ -> [Core TH.TypeQ] -> DsM (Core TH.TypeQ)
1493 repTapps f [] = return f
1494 repTapps f (t:ts) = do { f1 <- repTapp f t; repTapps f1 ts }
1496 repTSig :: Core TH.TypeQ -> Core TH.Kind -> DsM (Core TH.TypeQ)
1497 repTSig (MkC ty) (MkC ki) = rep2 sigTName [ty, ki]
1499 --------- Type constructors --------------
1501 repNamedTyCon :: Core TH.Name -> DsM (Core TH.TypeQ)
1502 repNamedTyCon (MkC s) = rep2 conTName [s]
1504 repTupleTyCon :: Int -> DsM (Core TH.TypeQ)
1505 -- Note: not Core Int; it's easier to be direct here
1506 repTupleTyCon i = rep2 tupleTName [mkIntExprInt i]
1508 repArrowTyCon :: DsM (Core TH.TypeQ)
1509 repArrowTyCon = rep2 arrowTName []
1511 repListTyCon :: DsM (Core TH.TypeQ)
1512 repListTyCon = rep2 listTName []
1514 ------------ Kinds -------------------
1516 repPlainTV :: Core TH.Name -> DsM (Core TH.TyVarBndr)
1517 repPlainTV (MkC nm) = rep2 plainTVName [nm]
1519 repKindedTV :: Core TH.Name -> Core TH.Kind -> DsM (Core TH.TyVarBndr)
1520 repKindedTV (MkC nm) (MkC ki) = rep2 kindedTVName [nm, ki]
1522 repStarK :: DsM (Core TH.Kind)
1523 repStarK = rep2 starKName []
1525 repArrowK :: Core TH.Kind -> Core TH.Kind -> DsM (Core TH.Kind)
1526 repArrowK (MkC ki1) (MkC ki2) = rep2 arrowKName [ki1, ki2]
1528 ----------------------------------------------------------
1531 repLiteral :: HsLit -> DsM (Core TH.Lit)
1533 = do lit' <- case lit of
1534 HsIntPrim i -> mk_integer i
1535 HsWordPrim w -> mk_integer w
1536 HsInt i -> mk_integer i
1537 HsFloatPrim r -> mk_rational r
1538 HsDoublePrim r -> mk_rational r
1540 lit_expr <- dsLit lit'
1542 Just lit_name -> rep2 lit_name [lit_expr]
1543 Nothing -> notHandled "Exotic literal" (ppr lit)
1545 mb_lit_name = case lit of
1546 HsInteger _ _ -> Just integerLName
1547 HsInt _ -> Just integerLName
1548 HsIntPrim _ -> Just intPrimLName
1549 HsWordPrim _ -> Just wordPrimLName
1550 HsFloatPrim _ -> Just floatPrimLName
1551 HsDoublePrim _ -> Just doublePrimLName
1552 HsChar _ -> Just charLName
1553 HsString _ -> Just stringLName
1554 HsRat _ _ -> Just rationalLName
1557 mk_integer :: Integer -> DsM HsLit
1558 mk_integer i = do integer_ty <- lookupType integerTyConName
1559 return $ HsInteger i integer_ty
1560 mk_rational :: Rational -> DsM HsLit
1561 mk_rational r = do rat_ty <- lookupType rationalTyConName
1562 return $ HsRat r rat_ty
1563 mk_string :: FastString -> DsM HsLit
1564 mk_string s = return $ HsString s
1566 repOverloadedLiteral :: HsOverLit Name -> DsM (Core TH.Lit)
1567 repOverloadedLiteral (OverLit { ol_val = val})
1568 = do { lit <- mk_lit val; repLiteral lit }
1569 -- The type Rational will be in the environment, becuase
1570 -- the smart constructor 'TH.Syntax.rationalL' uses it in its type,
1571 -- and rationalL is sucked in when any TH stuff is used
1573 mk_lit :: OverLitVal -> DsM HsLit
1574 mk_lit (HsIntegral i) = mk_integer i
1575 mk_lit (HsFractional f) = mk_rational f
1576 mk_lit (HsIsString s) = mk_string s
1578 --------------- Miscellaneous -------------------
1580 repGensym :: Core String -> DsM (Core (TH.Q TH.Name))
1581 repGensym (MkC lit_str) = rep2 newNameName [lit_str]
1583 repBindQ :: Type -> Type -- a and b
1584 -> Core (TH.Q a) -> Core (a -> TH.Q b) -> DsM (Core (TH.Q b))
1585 repBindQ ty_a ty_b (MkC x) (MkC y)
1586 = rep2 bindQName [Type ty_a, Type ty_b, x, y]
1588 repSequenceQ :: Type -> Core [TH.Q a] -> DsM (Core (TH.Q [a]))
1589 repSequenceQ ty_a (MkC list)
1590 = rep2 sequenceQName [Type ty_a, list]
1592 ------------ Lists and Tuples -------------------
1593 -- turn a list of patterns into a single pattern matching a list
1595 coreList :: Name -- Of the TyCon of the element type
1596 -> [Core a] -> DsM (Core [a])
1598 = do { elt_ty <- lookupType tc_name; return (coreList' elt_ty es) }
1600 coreList' :: Type -- The element type
1601 -> [Core a] -> Core [a]
1602 coreList' elt_ty es = MkC (mkListExpr elt_ty (map unC es ))
1604 nonEmptyCoreList :: [Core a] -> Core [a]
1605 -- The list must be non-empty so we can get the element type
1606 -- Otherwise use coreList
1607 nonEmptyCoreList [] = panic "coreList: empty argument"
1608 nonEmptyCoreList xs@(MkC x:_) = MkC (mkListExpr (exprType x) (map unC xs))
1610 coreStringLit :: String -> DsM (Core String)
1611 coreStringLit s = do { z <- mkStringExpr s; return(MkC z) }
1613 ------------ Bool, Literals & Variables -------------------
1615 coreBool :: Bool -> Core Bool
1616 coreBool False = MkC $ mkConApp falseDataCon []
1617 coreBool True = MkC $ mkConApp trueDataCon []
1619 coreIntLit :: Int -> DsM (Core Int)
1620 coreIntLit i = return (MkC (mkIntExprInt i))
1622 coreVar :: Id -> Core TH.Name -- The Id has type Name
1623 coreVar id = MkC (Var id)
1625 ----------------- Failure -----------------------
1626 notHandled :: String -> SDoc -> DsM a
1627 notHandled what doc = failWithDs msg
1629 msg = hang (text what <+> ptext (sLit "not (yet) handled by Template Haskell"))
1633 -- %************************************************************************
1635 -- The known-key names for Template Haskell
1637 -- %************************************************************************
1639 -- To add a name, do three things
1641 -- 1) Allocate a key
1643 -- 3) Add the name to knownKeyNames
1645 templateHaskellNames :: [Name]
1646 -- The names that are implicitly mentioned by ``bracket''
1647 -- Should stay in sync with the import list of DsMeta
1649 templateHaskellNames = [
1650 returnQName, bindQName, sequenceQName, newNameName, liftName,
1651 mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName, mkNameLName,
1654 charLName, stringLName, integerLName, intPrimLName, wordPrimLName,
1655 floatPrimLName, doublePrimLName, rationalLName,
1657 litPName, varPName, tupPName, conPName, tildePName, bangPName, infixPName,
1658 asPName, wildPName, recPName, listPName, sigPName,
1666 varEName, conEName, litEName, appEName, infixEName,
1667 infixAppName, sectionLName, sectionRName, lamEName, tupEName,
1668 condEName, letEName, caseEName, doEName, compEName,
1669 fromEName, fromThenEName, fromToEName, fromThenToEName,
1670 listEName, sigEName, recConEName, recUpdEName,
1674 guardedBName, normalBName,
1676 normalGEName, patGEName,
1678 bindSName, letSName, noBindSName, parSName,
1680 funDName, valDName, dataDName, newtypeDName, tySynDName,
1681 classDName, instanceDName, sigDName, forImpDName,
1682 pragInlDName, pragSpecDName, pragSpecInlDName,
1683 familyNoKindDName, familyKindDName, dataInstDName, newtypeInstDName,
1688 classPName, equalPName,
1690 isStrictName, notStrictName,
1692 normalCName, recCName, infixCName, forallCName,
1698 forallTName, varTName, conTName, appTName,
1699 tupleTName, arrowTName, listTName, sigTName,
1701 plainTVName, kindedTVName,
1703 starKName, arrowKName,
1705 cCallName, stdCallName,
1711 inlineSpecNoPhaseName, inlineSpecPhaseName,
1715 typeFamName, dataFamName,
1718 qTyConName, nameTyConName, patTyConName, fieldPatTyConName, matchQTyConName,
1719 clauseQTyConName, expQTyConName, fieldExpTyConName, predTyConName,
1720 stmtQTyConName, decQTyConName, conQTyConName, strictTypeQTyConName,
1721 varStrictTypeQTyConName, typeQTyConName, expTyConName, decTyConName,
1722 typeTyConName, tyVarBndrTyConName, matchTyConName, clauseTyConName,
1723 patQTyConName, fieldPatQTyConName, fieldExpQTyConName, funDepTyConName,
1727 quoteExpName, quotePatName]
1729 thSyn, thLib, qqLib :: Module
1730 thSyn = mkTHModule (fsLit "Language.Haskell.TH.Syntax")
1731 thLib = mkTHModule (fsLit "Language.Haskell.TH.Lib")
1732 qqLib = mkTHModule (fsLit "Language.Haskell.TH.Quote")
1734 mkTHModule :: FastString -> Module
1735 mkTHModule m = mkModule thPackageId (mkModuleNameFS m)
1737 libFun, libTc, thFun, thTc, qqFun :: FastString -> Unique -> Name
1738 libFun = mk_known_key_name OccName.varName thLib
1739 libTc = mk_known_key_name OccName.tcName thLib
1740 thFun = mk_known_key_name OccName.varName thSyn
1741 thTc = mk_known_key_name OccName.tcName thSyn
1742 qqFun = mk_known_key_name OccName.varName qqLib
1744 -------------------- TH.Syntax -----------------------
1745 qTyConName, nameTyConName, fieldExpTyConName, patTyConName,
1746 fieldPatTyConName, expTyConName, decTyConName, typeTyConName,
1747 tyVarBndrTyConName, matchTyConName, clauseTyConName, funDepTyConName,
1748 predTyConName :: Name
1749 qTyConName = thTc (fsLit "Q") qTyConKey
1750 nameTyConName = thTc (fsLit "Name") nameTyConKey
1751 fieldExpTyConName = thTc (fsLit "FieldExp") fieldExpTyConKey
1752 patTyConName = thTc (fsLit "Pat") patTyConKey
1753 fieldPatTyConName = thTc (fsLit "FieldPat") fieldPatTyConKey
1754 expTyConName = thTc (fsLit "Exp") expTyConKey
1755 decTyConName = thTc (fsLit "Dec") decTyConKey
1756 typeTyConName = thTc (fsLit "Type") typeTyConKey
1757 tyVarBndrTyConName= thTc (fsLit "TyVarBndr") tyVarBndrTyConKey
1758 matchTyConName = thTc (fsLit "Match") matchTyConKey
1759 clauseTyConName = thTc (fsLit "Clause") clauseTyConKey
1760 funDepTyConName = thTc (fsLit "FunDep") funDepTyConKey
1761 predTyConName = thTc (fsLit "Pred") predTyConKey
1763 returnQName, bindQName, sequenceQName, newNameName, liftName,
1764 mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName,
1765 mkNameLName, liftStringName :: Name
1766 returnQName = thFun (fsLit "returnQ") returnQIdKey
1767 bindQName = thFun (fsLit "bindQ") bindQIdKey
1768 sequenceQName = thFun (fsLit "sequenceQ") sequenceQIdKey
1769 newNameName = thFun (fsLit "newName") newNameIdKey
1770 liftName = thFun (fsLit "lift") liftIdKey
1771 liftStringName = thFun (fsLit "liftString") liftStringIdKey
1772 mkNameName = thFun (fsLit "mkName") mkNameIdKey
1773 mkNameG_vName = thFun (fsLit "mkNameG_v") mkNameG_vIdKey
1774 mkNameG_dName = thFun (fsLit "mkNameG_d") mkNameG_dIdKey
1775 mkNameG_tcName = thFun (fsLit "mkNameG_tc") mkNameG_tcIdKey
1776 mkNameLName = thFun (fsLit "mkNameL") mkNameLIdKey
1779 -------------------- TH.Lib -----------------------
1781 charLName, stringLName, integerLName, intPrimLName, wordPrimLName,
1782 floatPrimLName, doublePrimLName, rationalLName :: Name
1783 charLName = libFun (fsLit "charL") charLIdKey
1784 stringLName = libFun (fsLit "stringL") stringLIdKey
1785 integerLName = libFun (fsLit "integerL") integerLIdKey
1786 intPrimLName = libFun (fsLit "intPrimL") intPrimLIdKey
1787 wordPrimLName = libFun (fsLit "wordPrimL") wordPrimLIdKey
1788 floatPrimLName = libFun (fsLit "floatPrimL") floatPrimLIdKey
1789 doublePrimLName = libFun (fsLit "doublePrimL") doublePrimLIdKey
1790 rationalLName = libFun (fsLit "rationalL") rationalLIdKey
1793 litPName, varPName, tupPName, conPName, infixPName, tildePName, bangPName,
1794 asPName, wildPName, recPName, listPName, sigPName :: Name
1795 litPName = libFun (fsLit "litP") litPIdKey
1796 varPName = libFun (fsLit "varP") varPIdKey
1797 tupPName = libFun (fsLit "tupP") tupPIdKey
1798 conPName = libFun (fsLit "conP") conPIdKey
1799 infixPName = libFun (fsLit "infixP") infixPIdKey
1800 tildePName = libFun (fsLit "tildeP") tildePIdKey
1801 bangPName = libFun (fsLit "bangP") bangPIdKey
1802 asPName = libFun (fsLit "asP") asPIdKey
1803 wildPName = libFun (fsLit "wildP") wildPIdKey
1804 recPName = libFun (fsLit "recP") recPIdKey
1805 listPName = libFun (fsLit "listP") listPIdKey
1806 sigPName = libFun (fsLit "sigP") sigPIdKey
1808 -- type FieldPat = ...
1809 fieldPatName :: Name
1810 fieldPatName = libFun (fsLit "fieldPat") fieldPatIdKey
1814 matchName = libFun (fsLit "match") matchIdKey
1816 -- data Clause = ...
1818 clauseName = libFun (fsLit "clause") clauseIdKey
1821 varEName, conEName, litEName, appEName, infixEName, infixAppName,
1822 sectionLName, sectionRName, lamEName, tupEName, condEName,
1823 letEName, caseEName, doEName, compEName :: Name
1824 varEName = libFun (fsLit "varE") varEIdKey
1825 conEName = libFun (fsLit "conE") conEIdKey
1826 litEName = libFun (fsLit "litE") litEIdKey
1827 appEName = libFun (fsLit "appE") appEIdKey
1828 infixEName = libFun (fsLit "infixE") infixEIdKey
1829 infixAppName = libFun (fsLit "infixApp") infixAppIdKey
1830 sectionLName = libFun (fsLit "sectionL") sectionLIdKey
1831 sectionRName = libFun (fsLit "sectionR") sectionRIdKey
1832 lamEName = libFun (fsLit "lamE") lamEIdKey
1833 tupEName = libFun (fsLit "tupE") tupEIdKey
1834 condEName = libFun (fsLit "condE") condEIdKey
1835 letEName = libFun (fsLit "letE") letEIdKey
1836 caseEName = libFun (fsLit "caseE") caseEIdKey
1837 doEName = libFun (fsLit "doE") doEIdKey
1838 compEName = libFun (fsLit "compE") compEIdKey
1839 -- ArithSeq skips a level
1840 fromEName, fromThenEName, fromToEName, fromThenToEName :: Name
1841 fromEName = libFun (fsLit "fromE") fromEIdKey
1842 fromThenEName = libFun (fsLit "fromThenE") fromThenEIdKey
1843 fromToEName = libFun (fsLit "fromToE") fromToEIdKey
1844 fromThenToEName = libFun (fsLit "fromThenToE") fromThenToEIdKey
1846 listEName, sigEName, recConEName, recUpdEName :: Name
1847 listEName = libFun (fsLit "listE") listEIdKey
1848 sigEName = libFun (fsLit "sigE") sigEIdKey
1849 recConEName = libFun (fsLit "recConE") recConEIdKey
1850 recUpdEName = libFun (fsLit "recUpdE") recUpdEIdKey
1852 -- type FieldExp = ...
1853 fieldExpName :: Name
1854 fieldExpName = libFun (fsLit "fieldExp") fieldExpIdKey
1857 guardedBName, normalBName :: Name
1858 guardedBName = libFun (fsLit "guardedB") guardedBIdKey
1859 normalBName = libFun (fsLit "normalB") normalBIdKey
1862 normalGEName, patGEName :: Name
1863 normalGEName = libFun (fsLit "normalGE") normalGEIdKey
1864 patGEName = libFun (fsLit "patGE") patGEIdKey
1867 bindSName, letSName, noBindSName, parSName :: Name
1868 bindSName = libFun (fsLit "bindS") bindSIdKey
1869 letSName = libFun (fsLit "letS") letSIdKey
1870 noBindSName = libFun (fsLit "noBindS") noBindSIdKey
1871 parSName = libFun (fsLit "parS") parSIdKey
1874 funDName, valDName, dataDName, newtypeDName, tySynDName, classDName,
1875 instanceDName, sigDName, forImpDName, pragInlDName, pragSpecDName,
1876 pragSpecInlDName, familyNoKindDName, familyKindDName, dataInstDName,
1877 newtypeInstDName, tySynInstDName :: Name
1878 funDName = libFun (fsLit "funD") funDIdKey
1879 valDName = libFun (fsLit "valD") valDIdKey
1880 dataDName = libFun (fsLit "dataD") dataDIdKey
1881 newtypeDName = libFun (fsLit "newtypeD") newtypeDIdKey
1882 tySynDName = libFun (fsLit "tySynD") tySynDIdKey
1883 classDName = libFun (fsLit "classD") classDIdKey
1884 instanceDName = libFun (fsLit "instanceD") instanceDIdKey
1885 sigDName = libFun (fsLit "sigD") sigDIdKey
1886 forImpDName = libFun (fsLit "forImpD") forImpDIdKey
1887 pragInlDName = libFun (fsLit "pragInlD") pragInlDIdKey
1888 pragSpecDName = libFun (fsLit "pragSpecD") pragSpecDIdKey
1889 pragSpecInlDName = libFun (fsLit "pragSpecInlD") pragSpecInlDIdKey
1890 familyNoKindDName= libFun (fsLit "familyNoKindD")familyNoKindDIdKey
1891 familyKindDName = libFun (fsLit "familyKindD") familyKindDIdKey
1892 dataInstDName = libFun (fsLit "dataInstD") dataInstDIdKey
1893 newtypeInstDName = libFun (fsLit "newtypeInstD") newtypeInstDIdKey
1894 tySynInstDName = libFun (fsLit "tySynInstD") tySynInstDIdKey
1898 cxtName = libFun (fsLit "cxt") cxtIdKey
1901 classPName, equalPName :: Name
1902 classPName = libFun (fsLit "classP") classPIdKey
1903 equalPName = libFun (fsLit "equalP") equalPIdKey
1905 -- data Strict = ...
1906 isStrictName, notStrictName :: Name
1907 isStrictName = libFun (fsLit "isStrict") isStrictKey
1908 notStrictName = libFun (fsLit "notStrict") notStrictKey
1911 normalCName, recCName, infixCName, forallCName :: Name
1912 normalCName = libFun (fsLit "normalC") normalCIdKey
1913 recCName = libFun (fsLit "recC") recCIdKey
1914 infixCName = libFun (fsLit "infixC") infixCIdKey
1915 forallCName = libFun (fsLit "forallC") forallCIdKey
1917 -- type StrictType = ...
1918 strictTypeName :: Name
1919 strictTypeName = libFun (fsLit "strictType") strictTKey
1921 -- type VarStrictType = ...
1922 varStrictTypeName :: Name
1923 varStrictTypeName = libFun (fsLit "varStrictType") varStrictTKey
1926 forallTName, varTName, conTName, tupleTName, arrowTName,
1927 listTName, appTName, sigTName :: Name
1928 forallTName = libFun (fsLit "forallT") forallTIdKey
1929 varTName = libFun (fsLit "varT") varTIdKey
1930 conTName = libFun (fsLit "conT") conTIdKey
1931 tupleTName = libFun (fsLit "tupleT") tupleTIdKey
1932 arrowTName = libFun (fsLit "arrowT") arrowTIdKey
1933 listTName = libFun (fsLit "listT") listTIdKey
1934 appTName = libFun (fsLit "appT") appTIdKey
1935 sigTName = libFun (fsLit "sigT") sigTIdKey
1937 -- data TyVarBndr = ...
1938 plainTVName, kindedTVName :: Name
1939 plainTVName = libFun (fsLit "plainTV") plainTVIdKey
1940 kindedTVName = libFun (fsLit "kindedTV") kindedTVIdKey
1943 starKName, arrowKName :: Name
1944 starKName = libFun (fsLit "starK") starKIdKey
1945 arrowKName = libFun (fsLit "arrowK") arrowKIdKey
1947 -- data Callconv = ...
1948 cCallName, stdCallName :: Name
1949 cCallName = libFun (fsLit "cCall") cCallIdKey
1950 stdCallName = libFun (fsLit "stdCall") stdCallIdKey
1952 -- data Safety = ...
1953 unsafeName, safeName, threadsafeName :: Name
1954 unsafeName = libFun (fsLit "unsafe") unsafeIdKey
1955 safeName = libFun (fsLit "safe") safeIdKey
1956 threadsafeName = libFun (fsLit "threadsafe") threadsafeIdKey
1958 -- data InlineSpec = ...
1959 inlineSpecNoPhaseName, inlineSpecPhaseName :: Name
1960 inlineSpecNoPhaseName = libFun (fsLit "inlineSpecNoPhase") inlineSpecNoPhaseIdKey
1961 inlineSpecPhaseName = libFun (fsLit "inlineSpecPhase") inlineSpecPhaseIdKey
1963 -- data FunDep = ...
1965 funDepName = libFun (fsLit "funDep") funDepIdKey
1967 -- data FamFlavour = ...
1968 typeFamName, dataFamName :: Name
1969 typeFamName = libFun (fsLit "typeFam") typeFamIdKey
1970 dataFamName = libFun (fsLit "dataFam") dataFamIdKey
1972 matchQTyConName, clauseQTyConName, expQTyConName, stmtQTyConName,
1973 decQTyConName, conQTyConName, strictTypeQTyConName,
1974 varStrictTypeQTyConName, typeQTyConName, fieldExpQTyConName,
1975 patQTyConName, fieldPatQTyConName, predQTyConName :: Name
1976 matchQTyConName = libTc (fsLit "MatchQ") matchQTyConKey
1977 clauseQTyConName = libTc (fsLit "ClauseQ") clauseQTyConKey
1978 expQTyConName = libTc (fsLit "ExpQ") expQTyConKey
1979 stmtQTyConName = libTc (fsLit "StmtQ") stmtQTyConKey
1980 decQTyConName = libTc (fsLit "DecQ") decQTyConKey
1981 conQTyConName = libTc (fsLit "ConQ") conQTyConKey
1982 strictTypeQTyConName = libTc (fsLit "StrictTypeQ") strictTypeQTyConKey
1983 varStrictTypeQTyConName = libTc (fsLit "VarStrictTypeQ") varStrictTypeQTyConKey
1984 typeQTyConName = libTc (fsLit "TypeQ") typeQTyConKey
1985 fieldExpQTyConName = libTc (fsLit "FieldExpQ") fieldExpQTyConKey
1986 patQTyConName = libTc (fsLit "PatQ") patQTyConKey
1987 fieldPatQTyConName = libTc (fsLit "FieldPatQ") fieldPatQTyConKey
1988 predQTyConName = libTc (fsLit "PredQ") predQTyConKey
1991 quoteExpName, quotePatName :: Name
1992 quoteExpName = qqFun (fsLit "quoteExp") quoteExpKey
1993 quotePatName = qqFun (fsLit "quotePat") quotePatKey
1995 -- TyConUniques available: 100-129
1996 -- Check in PrelNames if you want to change this
1998 expTyConKey, matchTyConKey, clauseTyConKey, qTyConKey, expQTyConKey,
1999 decQTyConKey, patTyConKey, matchQTyConKey, clauseQTyConKey,
2000 stmtQTyConKey, conQTyConKey, typeQTyConKey, typeTyConKey, tyVarBndrTyConKey,
2001 decTyConKey, varStrictTypeQTyConKey, strictTypeQTyConKey,
2002 fieldExpTyConKey, fieldPatTyConKey, nameTyConKey, patQTyConKey,
2003 fieldPatQTyConKey, fieldExpQTyConKey, funDepTyConKey, predTyConKey,
2004 predQTyConKey :: Unique
2005 expTyConKey = mkPreludeTyConUnique 100
2006 matchTyConKey = mkPreludeTyConUnique 101
2007 clauseTyConKey = mkPreludeTyConUnique 102
2008 qTyConKey = mkPreludeTyConUnique 103
2009 expQTyConKey = mkPreludeTyConUnique 104
2010 decQTyConKey = mkPreludeTyConUnique 105
2011 patTyConKey = mkPreludeTyConUnique 106
2012 matchQTyConKey = mkPreludeTyConUnique 107
2013 clauseQTyConKey = mkPreludeTyConUnique 108
2014 stmtQTyConKey = mkPreludeTyConUnique 109
2015 conQTyConKey = mkPreludeTyConUnique 110
2016 typeQTyConKey = mkPreludeTyConUnique 111
2017 typeTyConKey = mkPreludeTyConUnique 112
2018 tyVarBndrTyConKey = mkPreludeTyConUnique 125
2019 decTyConKey = mkPreludeTyConUnique 113
2020 varStrictTypeQTyConKey = mkPreludeTyConUnique 114
2021 strictTypeQTyConKey = mkPreludeTyConUnique 115
2022 fieldExpTyConKey = mkPreludeTyConUnique 116
2023 fieldPatTyConKey = mkPreludeTyConUnique 117
2024 nameTyConKey = mkPreludeTyConUnique 118
2025 patQTyConKey = mkPreludeTyConUnique 119
2026 fieldPatQTyConKey = mkPreludeTyConUnique 120
2027 fieldExpQTyConKey = mkPreludeTyConUnique 121
2028 funDepTyConKey = mkPreludeTyConUnique 122
2029 predTyConKey = mkPreludeTyConUnique 123
2030 predQTyConKey = mkPreludeTyConUnique 124
2032 -- IdUniques available: 200-399
2033 -- If you want to change this, make sure you check in PrelNames
2035 returnQIdKey, bindQIdKey, sequenceQIdKey, liftIdKey, newNameIdKey,
2036 mkNameIdKey, mkNameG_vIdKey, mkNameG_dIdKey, mkNameG_tcIdKey,
2037 mkNameLIdKey :: Unique
2038 returnQIdKey = mkPreludeMiscIdUnique 200
2039 bindQIdKey = mkPreludeMiscIdUnique 201
2040 sequenceQIdKey = mkPreludeMiscIdUnique 202
2041 liftIdKey = mkPreludeMiscIdUnique 203
2042 newNameIdKey = mkPreludeMiscIdUnique 204
2043 mkNameIdKey = mkPreludeMiscIdUnique 205
2044 mkNameG_vIdKey = mkPreludeMiscIdUnique 206
2045 mkNameG_dIdKey = mkPreludeMiscIdUnique 207
2046 mkNameG_tcIdKey = mkPreludeMiscIdUnique 208
2047 mkNameLIdKey = mkPreludeMiscIdUnique 209
2051 charLIdKey, stringLIdKey, integerLIdKey, intPrimLIdKey, wordPrimLIdKey,
2052 floatPrimLIdKey, doublePrimLIdKey, rationalLIdKey :: Unique
2053 charLIdKey = mkPreludeMiscIdUnique 210
2054 stringLIdKey = mkPreludeMiscIdUnique 211
2055 integerLIdKey = mkPreludeMiscIdUnique 212
2056 intPrimLIdKey = mkPreludeMiscIdUnique 213
2057 wordPrimLIdKey = mkPreludeMiscIdUnique 214
2058 floatPrimLIdKey = mkPreludeMiscIdUnique 215
2059 doublePrimLIdKey = mkPreludeMiscIdUnique 216
2060 rationalLIdKey = mkPreludeMiscIdUnique 217
2062 liftStringIdKey :: Unique
2063 liftStringIdKey = mkPreludeMiscIdUnique 218
2066 litPIdKey, varPIdKey, tupPIdKey, conPIdKey, infixPIdKey, tildePIdKey, bangPIdKey,
2067 asPIdKey, wildPIdKey, recPIdKey, listPIdKey, sigPIdKey :: Unique
2068 litPIdKey = mkPreludeMiscIdUnique 220
2069 varPIdKey = mkPreludeMiscIdUnique 221
2070 tupPIdKey = mkPreludeMiscIdUnique 222
2071 conPIdKey = mkPreludeMiscIdUnique 223
2072 infixPIdKey = mkPreludeMiscIdUnique 312
2073 tildePIdKey = mkPreludeMiscIdUnique 224
2074 bangPIdKey = mkPreludeMiscIdUnique 359
2075 asPIdKey = mkPreludeMiscIdUnique 225
2076 wildPIdKey = mkPreludeMiscIdUnique 226
2077 recPIdKey = mkPreludeMiscIdUnique 227
2078 listPIdKey = mkPreludeMiscIdUnique 228
2079 sigPIdKey = mkPreludeMiscIdUnique 229
2081 -- type FieldPat = ...
2082 fieldPatIdKey :: Unique
2083 fieldPatIdKey = mkPreludeMiscIdUnique 230
2086 matchIdKey :: Unique
2087 matchIdKey = mkPreludeMiscIdUnique 231
2089 -- data Clause = ...
2090 clauseIdKey :: Unique
2091 clauseIdKey = mkPreludeMiscIdUnique 232
2095 varEIdKey, conEIdKey, litEIdKey, appEIdKey, infixEIdKey, infixAppIdKey,
2096 sectionLIdKey, sectionRIdKey, lamEIdKey, tupEIdKey, condEIdKey,
2097 letEIdKey, caseEIdKey, doEIdKey, compEIdKey,
2098 fromEIdKey, fromThenEIdKey, fromToEIdKey, fromThenToEIdKey,
2099 listEIdKey, sigEIdKey, recConEIdKey, recUpdEIdKey :: Unique
2100 varEIdKey = mkPreludeMiscIdUnique 240
2101 conEIdKey = mkPreludeMiscIdUnique 241
2102 litEIdKey = mkPreludeMiscIdUnique 242
2103 appEIdKey = mkPreludeMiscIdUnique 243
2104 infixEIdKey = mkPreludeMiscIdUnique 244
2105 infixAppIdKey = mkPreludeMiscIdUnique 245
2106 sectionLIdKey = mkPreludeMiscIdUnique 246
2107 sectionRIdKey = mkPreludeMiscIdUnique 247
2108 lamEIdKey = mkPreludeMiscIdUnique 248
2109 tupEIdKey = mkPreludeMiscIdUnique 249
2110 condEIdKey = mkPreludeMiscIdUnique 250
2111 letEIdKey = mkPreludeMiscIdUnique 251
2112 caseEIdKey = mkPreludeMiscIdUnique 252
2113 doEIdKey = mkPreludeMiscIdUnique 253
2114 compEIdKey = mkPreludeMiscIdUnique 254
2115 fromEIdKey = mkPreludeMiscIdUnique 255
2116 fromThenEIdKey = mkPreludeMiscIdUnique 256
2117 fromToEIdKey = mkPreludeMiscIdUnique 257
2118 fromThenToEIdKey = mkPreludeMiscIdUnique 258
2119 listEIdKey = mkPreludeMiscIdUnique 259
2120 sigEIdKey = mkPreludeMiscIdUnique 260
2121 recConEIdKey = mkPreludeMiscIdUnique 261
2122 recUpdEIdKey = mkPreludeMiscIdUnique 262
2124 -- type FieldExp = ...
2125 fieldExpIdKey :: Unique
2126 fieldExpIdKey = mkPreludeMiscIdUnique 265
2129 guardedBIdKey, normalBIdKey :: Unique
2130 guardedBIdKey = mkPreludeMiscIdUnique 266
2131 normalBIdKey = mkPreludeMiscIdUnique 267
2134 normalGEIdKey, patGEIdKey :: Unique
2135 normalGEIdKey = mkPreludeMiscIdUnique 310
2136 patGEIdKey = mkPreludeMiscIdUnique 311
2139 bindSIdKey, letSIdKey, noBindSIdKey, parSIdKey :: Unique
2140 bindSIdKey = mkPreludeMiscIdUnique 268
2141 letSIdKey = mkPreludeMiscIdUnique 269
2142 noBindSIdKey = mkPreludeMiscIdUnique 270
2143 parSIdKey = mkPreludeMiscIdUnique 271
2146 funDIdKey, valDIdKey, dataDIdKey, newtypeDIdKey, tySynDIdKey,
2147 classDIdKey, instanceDIdKey, sigDIdKey, forImpDIdKey, pragInlDIdKey,
2148 pragSpecDIdKey, pragSpecInlDIdKey, familyNoKindDIdKey, familyKindDIdKey,
2149 dataInstDIdKey, newtypeInstDIdKey, tySynInstDIdKey :: Unique
2150 funDIdKey = mkPreludeMiscIdUnique 272
2151 valDIdKey = mkPreludeMiscIdUnique 273
2152 dataDIdKey = mkPreludeMiscIdUnique 274
2153 newtypeDIdKey = mkPreludeMiscIdUnique 275
2154 tySynDIdKey = mkPreludeMiscIdUnique 276
2155 classDIdKey = mkPreludeMiscIdUnique 277
2156 instanceDIdKey = mkPreludeMiscIdUnique 278
2157 sigDIdKey = mkPreludeMiscIdUnique 279
2158 forImpDIdKey = mkPreludeMiscIdUnique 297
2159 pragInlDIdKey = mkPreludeMiscIdUnique 348
2160 pragSpecDIdKey = mkPreludeMiscIdUnique 349
2161 pragSpecInlDIdKey = mkPreludeMiscIdUnique 352
2162 familyNoKindDIdKey= mkPreludeMiscIdUnique 340
2163 familyKindDIdKey = mkPreludeMiscIdUnique 353
2164 dataInstDIdKey = mkPreludeMiscIdUnique 341
2165 newtypeInstDIdKey = mkPreludeMiscIdUnique 342
2166 tySynInstDIdKey = mkPreludeMiscIdUnique 343
2170 cxtIdKey = mkPreludeMiscIdUnique 280
2173 classPIdKey, equalPIdKey :: Unique
2174 classPIdKey = mkPreludeMiscIdUnique 346
2175 equalPIdKey = mkPreludeMiscIdUnique 347
2177 -- data Strict = ...
2178 isStrictKey, notStrictKey :: Unique
2179 isStrictKey = mkPreludeMiscIdUnique 281
2180 notStrictKey = mkPreludeMiscIdUnique 282
2183 normalCIdKey, recCIdKey, infixCIdKey, forallCIdKey :: Unique
2184 normalCIdKey = mkPreludeMiscIdUnique 283
2185 recCIdKey = mkPreludeMiscIdUnique 284
2186 infixCIdKey = mkPreludeMiscIdUnique 285
2187 forallCIdKey = mkPreludeMiscIdUnique 288
2189 -- type StrictType = ...
2190 strictTKey :: Unique
2191 strictTKey = mkPreludeMiscIdUnique 286
2193 -- type VarStrictType = ...
2194 varStrictTKey :: Unique
2195 varStrictTKey = mkPreludeMiscIdUnique 287
2198 forallTIdKey, varTIdKey, conTIdKey, tupleTIdKey, arrowTIdKey,
2199 listTIdKey, appTIdKey, sigTIdKey :: Unique
2200 forallTIdKey = mkPreludeMiscIdUnique 290
2201 varTIdKey = mkPreludeMiscIdUnique 291
2202 conTIdKey = mkPreludeMiscIdUnique 292
2203 tupleTIdKey = mkPreludeMiscIdUnique 294
2204 arrowTIdKey = mkPreludeMiscIdUnique 295
2205 listTIdKey = mkPreludeMiscIdUnique 296
2206 appTIdKey = mkPreludeMiscIdUnique 293
2207 sigTIdKey = mkPreludeMiscIdUnique 358
2209 -- data TyVarBndr = ...
2210 plainTVIdKey, kindedTVIdKey :: Unique
2211 plainTVIdKey = mkPreludeMiscIdUnique 354
2212 kindedTVIdKey = mkPreludeMiscIdUnique 355
2215 starKIdKey, arrowKIdKey :: Unique
2216 starKIdKey = mkPreludeMiscIdUnique 356
2217 arrowKIdKey = mkPreludeMiscIdUnique 357
2219 -- data Callconv = ...
2220 cCallIdKey, stdCallIdKey :: Unique
2221 cCallIdKey = mkPreludeMiscIdUnique 300
2222 stdCallIdKey = mkPreludeMiscIdUnique 301
2224 -- data Safety = ...
2225 unsafeIdKey, safeIdKey, threadsafeIdKey :: Unique
2226 unsafeIdKey = mkPreludeMiscIdUnique 305
2227 safeIdKey = mkPreludeMiscIdUnique 306
2228 threadsafeIdKey = mkPreludeMiscIdUnique 307
2230 -- data InlineSpec =
2231 inlineSpecNoPhaseIdKey, inlineSpecPhaseIdKey :: Unique
2232 inlineSpecNoPhaseIdKey = mkPreludeMiscIdUnique 350
2233 inlineSpecPhaseIdKey = mkPreludeMiscIdUnique 351
2235 -- data FunDep = ...
2236 funDepIdKey :: Unique
2237 funDepIdKey = mkPreludeMiscIdUnique 320
2239 -- data FamFlavour = ...
2240 typeFamIdKey, dataFamIdKey :: Unique
2241 typeFamIdKey = mkPreludeMiscIdUnique 344
2242 dataFamIdKey = mkPreludeMiscIdUnique 345
2245 quoteExpKey, quotePatKey :: Unique
2246 quoteExpKey = mkPreludeMiscIdUnique 321
2247 quotePatKey = mkPreludeMiscIdUnique 322