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)
718 -- FIXME: I haven't got the types here right yet
719 repE e@(HsDo ctxt sts body _)
720 | case ctxt of { DoExpr -> True; GhciStmt -> True; _ -> False }
721 = do { (ss,zs) <- repLSts sts;
722 body' <- addBinds ss $ repLE body;
723 ret <- repNoBindSt body';
724 e' <- repDoE (nonEmptyCoreList (zs ++ [ret]));
728 = do { (ss,zs) <- repLSts sts;
729 body' <- addBinds ss $ repLE body;
730 ret <- repNoBindSt body';
731 e' <- repComp (nonEmptyCoreList (zs ++ [ret]));
735 = notHandled "mdo and [: :]" (ppr e)
737 repE (ExplicitList _ es) = do { xs <- repLEs es; repListExp xs }
738 repE e@(ExplicitPArr _ _) = notHandled "Parallel arrays" (ppr e)
739 repE e@(ExplicitTuple es boxed)
740 | not (isBoxed boxed) = notHandled "Unboxed tuples" (ppr e)
741 | not (all tupArgPresent es) = notHandled "Tuple sections" (ppr e)
742 | otherwise = do { xs <- repLEs [e | Present e <- es]; repTup xs }
744 repE (RecordCon c _ flds)
745 = do { x <- lookupLOcc c;
746 fs <- repFields flds;
748 repE (RecordUpd e flds _ _ _)
750 fs <- repFields flds;
753 repE (ExprWithTySig e ty) = do { e1 <- repLE e; t1 <- repLTy ty; repSigExp e1 t1 }
754 repE (ArithSeq _ aseq) =
756 From e -> do { ds1 <- repLE e; repFrom ds1 }
765 FromThenTo e1 e2 e3 -> do
769 repFromThenTo ds1 ds2 ds3
771 repE (HsSpliceE splice) = repSplice splice
772 repE e@(PArrSeq {}) = notHandled "Parallel arrays" (ppr e)
773 repE e@(HsCoreAnn {}) = notHandled "Core annotations" (ppr e)
774 repE e@(HsSCC {}) = notHandled "Cost centres" (ppr e)
775 repE e@(HsTickPragma {}) = notHandled "Tick Pragma" (ppr e)
776 repE e@(HsBracketOut {}) = notHandled "TH brackets" (ppr e)
777 repE e = notHandled "Expression form" (ppr e)
779 -----------------------------------------------------------------------------
780 -- Building representations of auxillary structures like Match, Clause, Stmt,
782 repMatchTup :: LMatch Name -> DsM (Core TH.MatchQ)
783 repMatchTup (L _ (Match [p] _ (GRHSs guards wheres))) =
784 do { ss1 <- mkGenSyms (collectPatBinders p)
785 ; addBinds ss1 $ do {
787 ; (ss2,ds) <- repBinds wheres
788 ; addBinds ss2 $ do {
789 ; gs <- repGuards guards
790 ; match <- repMatch p1 gs ds
791 ; wrapGenSyns (ss1++ss2) match }}}
792 repMatchTup _ = panic "repMatchTup: case alt with more than one arg"
794 repClauseTup :: LMatch Name -> DsM (Core TH.ClauseQ)
795 repClauseTup (L _ (Match ps _ (GRHSs guards wheres))) =
796 do { ss1 <- mkGenSyms (collectPatsBinders ps)
797 ; addBinds ss1 $ do {
799 ; (ss2,ds) <- repBinds wheres
800 ; addBinds ss2 $ do {
801 gs <- repGuards guards
802 ; clause <- repClause ps1 gs ds
803 ; wrapGenSyns (ss1++ss2) clause }}}
805 repGuards :: [LGRHS Name] -> DsM (Core TH.BodyQ)
806 repGuards [L _ (GRHS [] e)]
807 = do {a <- repLE e; repNormal a }
809 = do { zs <- mapM process other;
810 let {(xs, ys) = unzip zs};
811 gd <- repGuarded (nonEmptyCoreList ys);
812 wrapGenSyns (concat xs) gd }
814 process :: LGRHS Name -> DsM ([GenSymBind], (Core (TH.Q (TH.Guard, TH.Exp))))
815 process (L _ (GRHS [L _ (ExprStmt e1 _ _)] e2))
816 = do { x <- repLNormalGE e1 e2;
818 process (L _ (GRHS ss rhs))
819 = do (gs, ss') <- repLSts ss
820 rhs' <- addBinds gs $ repLE rhs
821 g <- repPatGE (nonEmptyCoreList ss') rhs'
824 repFields :: HsRecordBinds Name -> DsM (Core [TH.Q TH.FieldExp])
825 repFields (HsRecFields { rec_flds = flds })
826 = do { fnames <- mapM lookupLOcc (map hsRecFieldId flds)
827 ; es <- mapM repLE (map hsRecFieldArg flds)
828 ; fs <- zipWithM repFieldExp fnames es
829 ; coreList fieldExpQTyConName fs }
832 -----------------------------------------------------------------------------
833 -- Representing Stmt's is tricky, especially if bound variables
834 -- shadow each other. Consider: [| do { x <- f 1; x <- f x; g x } |]
835 -- First gensym new names for every variable in any of the patterns.
836 -- both static (x'1 and x'2), and dynamic ((gensym "x") and (gensym "y"))
837 -- if variables didn't shaddow, the static gensym wouldn't be necessary
838 -- and we could reuse the original names (x and x).
840 -- do { x'1 <- gensym "x"
841 -- ; x'2 <- gensym "x"
842 -- ; doE [ BindSt (pvar x'1) [| f 1 |]
843 -- , BindSt (pvar x'2) [| f x |]
844 -- , NoBindSt [| g x |]
848 -- The strategy is to translate a whole list of do-bindings by building a
849 -- bigger environment, and a bigger set of meta bindings
850 -- (like: x'1 <- gensym "x" ) and then combining these with the translations
851 -- of the expressions within the Do
853 -----------------------------------------------------------------------------
854 -- The helper function repSts computes the translation of each sub expression
855 -- and a bunch of prefix bindings denoting the dynamic renaming.
857 repLSts :: [LStmt Name] -> DsM ([GenSymBind], [Core TH.StmtQ])
858 repLSts stmts = repSts (map unLoc stmts)
860 repSts :: [Stmt Name] -> DsM ([GenSymBind], [Core TH.StmtQ])
861 repSts (BindStmt p e _ _ : ss) =
863 ; ss1 <- mkGenSyms (collectPatBinders p)
864 ; addBinds ss1 $ do {
866 ; (ss2,zs) <- repSts ss
867 ; z <- repBindSt p1 e2
868 ; return (ss1++ss2, z : zs) }}
869 repSts (LetStmt bs : ss) =
870 do { (ss1,ds) <- repBinds bs
872 ; (ss2,zs) <- addBinds ss1 (repSts ss)
873 ; return (ss1++ss2, z : zs) }
874 repSts (ExprStmt e _ _ : ss) =
876 ; z <- repNoBindSt e2
877 ; (ss2,zs) <- repSts ss
878 ; return (ss2, z : zs) }
879 repSts [] = return ([],[])
880 repSts other = notHandled "Exotic statement" (ppr other)
883 -----------------------------------------------------------
885 -----------------------------------------------------------
887 repBinds :: HsLocalBinds Name -> DsM ([GenSymBind], Core [TH.DecQ])
888 repBinds EmptyLocalBinds
889 = do { core_list <- coreList decQTyConName []
890 ; return ([], core_list) }
892 repBinds b@(HsIPBinds _) = notHandled "Implicit parameters" (ppr b)
894 repBinds (HsValBinds decs)
895 = do { let { bndrs = map unLoc (collectHsValBinders decs) }
896 -- No need to worrry about detailed scopes within
897 -- the binding group, because we are talking Names
898 -- here, so we can safely treat it as a mutually
900 ; ss <- mkGenSyms bndrs
901 ; prs <- addBinds ss (rep_val_binds decs)
902 ; core_list <- coreList decQTyConName
903 (de_loc (sort_by_loc prs))
904 ; return (ss, core_list) }
906 rep_val_binds :: HsValBinds Name -> DsM [(SrcSpan, Core TH.DecQ)]
907 -- Assumes: all the binders of the binding are alrady in the meta-env
908 rep_val_binds (ValBindsOut binds sigs)
909 = do { core1 <- rep_binds' (unionManyBags (map snd binds))
910 ; core2 <- rep_sigs' sigs
911 ; return (core1 ++ core2) }
912 rep_val_binds (ValBindsIn _ _)
913 = panic "rep_val_binds: ValBindsIn"
915 rep_binds :: LHsBinds Name -> DsM [Core TH.DecQ]
916 rep_binds binds = do { binds_w_locs <- rep_binds' binds
917 ; return (de_loc (sort_by_loc binds_w_locs)) }
919 rep_binds' :: LHsBinds Name -> DsM [(SrcSpan, Core TH.DecQ)]
920 rep_binds' binds = mapM rep_bind (bagToList binds)
922 rep_bind :: LHsBind Name -> DsM (SrcSpan, Core TH.DecQ)
923 -- Assumes: all the binders of the binding are alrady in the meta-env
925 -- Note GHC treats declarations of a variable (not a pattern)
926 -- e.g. x = g 5 as a Fun MonoBinds. This is indicated by a single match
927 -- with an empty list of patterns
928 rep_bind (L loc (FunBind { fun_id = fn,
929 fun_matches = MatchGroup [L _ (Match [] _ (GRHSs guards wheres))] _ }))
930 = do { (ss,wherecore) <- repBinds wheres
931 ; guardcore <- addBinds ss (repGuards guards)
932 ; fn' <- lookupLBinder fn
934 ; ans <- repVal p guardcore wherecore
935 ; ans' <- wrapGenSyns ss ans
936 ; return (loc, ans') }
938 rep_bind (L loc (FunBind { fun_id = fn, fun_matches = MatchGroup ms _ }))
939 = do { ms1 <- mapM repClauseTup ms
940 ; fn' <- lookupLBinder fn
941 ; ans <- repFun fn' (nonEmptyCoreList ms1)
942 ; return (loc, ans) }
944 rep_bind (L loc (PatBind { pat_lhs = pat, pat_rhs = GRHSs guards wheres }))
945 = do { patcore <- repLP pat
946 ; (ss,wherecore) <- repBinds wheres
947 ; guardcore <- addBinds ss (repGuards guards)
948 ; ans <- repVal patcore guardcore wherecore
949 ; ans' <- wrapGenSyns ss ans
950 ; return (loc, ans') }
952 rep_bind (L _ (VarBind { var_id = v, var_rhs = e}))
953 = do { v' <- lookupBinder v
956 ; patcore <- repPvar v'
957 ; empty_decls <- coreList decQTyConName []
958 ; ans <- repVal patcore x empty_decls
959 ; return (srcLocSpan (getSrcLoc v), ans) }
961 rep_bind (L _ (AbsBinds {})) = panic "rep_bind: AbsBinds"
963 -----------------------------------------------------------------------------
964 -- Since everything in a Bind is mutually recursive we need rename all
965 -- all the variables simultaneously. For example:
966 -- [| AndMonoBinds (f x = x + g 2) (g x = f 1 + 2) |] would translate to
967 -- do { f'1 <- gensym "f"
968 -- ; g'2 <- gensym "g"
969 -- ; [ do { x'3 <- gensym "x"; fun f'1 [pvar x'3] [| x + g2 |]},
970 -- do { x'4 <- gensym "x"; fun g'2 [pvar x'4] [| f 1 + 2 |]}
972 -- This requires collecting the bindings (f'1 <- gensym "f"), and the
973 -- environment ( f |-> f'1 ) from each binding, and then unioning them
974 -- together. As we do this we collect GenSymBinds's which represent the renamed
975 -- variables bound by the Bindings. In order not to lose track of these
976 -- representations we build a shadow datatype MB with the same structure as
977 -- MonoBinds, but which has slots for the representations
980 -----------------------------------------------------------------------------
981 -- GHC allows a more general form of lambda abstraction than specified
982 -- by Haskell 98. In particular it allows guarded lambda's like :
983 -- (\ x | even x -> 0 | odd x -> 1) at the moment we can't represent this in
984 -- Haskell Template's Meta.Exp type so we punt if it isn't a simple thing like
985 -- (\ p1 .. pn -> exp) by causing an error.
987 repLambda :: LMatch Name -> DsM (Core TH.ExpQ)
988 repLambda (L _ (Match ps _ (GRHSs [L _ (GRHS [] e)] EmptyLocalBinds)))
989 = do { let bndrs = collectPatsBinders ps ;
990 ; ss <- mkGenSyms bndrs
991 ; lam <- addBinds ss (
992 do { xs <- repLPs ps; body <- repLE e; repLam xs body })
993 ; wrapGenSyns ss lam }
995 repLambda (L _ m) = notHandled "Guarded labmdas" (pprMatch (LambdaExpr :: HsMatchContext Name) m)
998 -----------------------------------------------------------------------------
1000 -- repP deals with patterns. It assumes that we have already
1001 -- walked over the pattern(s) once to collect the binders, and
1002 -- have extended the environment. So every pattern-bound
1003 -- variable should already appear in the environment.
1005 -- Process a list of patterns
1006 repLPs :: [LPat Name] -> DsM (Core [TH.PatQ])
1007 repLPs ps = do { ps' <- mapM repLP ps ;
1008 coreList patQTyConName ps' }
1010 repLP :: LPat Name -> DsM (Core TH.PatQ)
1011 repLP (L _ p) = repP p
1013 repP :: Pat Name -> DsM (Core TH.PatQ)
1014 repP (WildPat _) = repPwild
1015 repP (LitPat l) = do { l2 <- repLiteral l; repPlit l2 }
1016 repP (VarPat x) = do { x' <- lookupBinder x; repPvar x' }
1017 repP (LazyPat p) = do { p1 <- repLP p; repPtilde p1 }
1018 repP (BangPat p) = do { p1 <- repLP p; repPbang p1 }
1019 repP (AsPat x p) = do { x' <- lookupLBinder x; p1 <- repLP p; repPaspat x' p1 }
1020 repP (ParPat p) = repLP p
1021 repP (ListPat ps _) = do { qs <- repLPs ps; repPlist qs }
1022 repP p@(TuplePat ps boxed _)
1023 | not (isBoxed boxed) = notHandled "Unboxed tuples" (ppr p)
1024 | otherwise = do { qs <- repLPs ps; repPtup qs }
1025 repP (ConPatIn dc details)
1026 = do { con_str <- lookupLOcc dc
1028 PrefixCon ps -> do { qs <- repLPs ps; repPcon con_str qs }
1029 RecCon rec -> do { let flds = rec_flds rec
1030 ; vs <- sequence $ map lookupLOcc (map hsRecFieldId flds)
1031 ; ps <- sequence $ map repLP (map hsRecFieldArg flds)
1032 ; fps <- zipWithM (\x y -> rep2 fieldPatName [unC x,unC y]) vs ps
1033 ; fps' <- coreList fieldPatQTyConName fps
1034 ; repPrec con_str fps' }
1035 InfixCon p1 p2 -> do { p1' <- repLP p1;
1037 repPinfix p1' con_str p2' }
1039 repP (NPat l Nothing _) = do { a <- repOverloadedLiteral l; repPlit a }
1040 repP p@(NPat _ (Just _) _) = notHandled "Negative overloaded patterns" (ppr p)
1041 repP p@(SigPatIn {}) = notHandled "Type signatures in patterns" (ppr p)
1042 -- The problem is to do with scoped type variables.
1043 -- To implement them, we have to implement the scoping rules
1044 -- here in DsMeta, and I don't want to do that today!
1045 -- do { p' <- repLP p; t' <- repLTy t; repPsig p' t' }
1046 -- repPsig :: Core TH.PatQ -> Core TH.TypeQ -> DsM (Core TH.PatQ)
1047 -- repPsig (MkC p) (MkC t) = rep2 sigPName [p, t]
1049 repP other = notHandled "Exotic pattern" (ppr other)
1051 ----------------------------------------------------------
1052 -- Declaration ordering helpers
1054 sort_by_loc :: [(SrcSpan, a)] -> [(SrcSpan, a)]
1055 sort_by_loc xs = sortBy comp xs
1056 where comp x y = compare (fst x) (fst y)
1058 de_loc :: [(a, b)] -> [b]
1061 ----------------------------------------------------------
1062 -- The meta-environment
1064 -- A name/identifier association for fresh names of locally bound entities
1065 type GenSymBind = (Name, Id) -- Gensym the string and bind it to the Id
1066 -- I.e. (x, x_id) means
1067 -- let x_id = gensym "x" in ...
1069 -- Generate a fresh name for a locally bound entity
1071 mkGenSyms :: [Name] -> DsM [GenSymBind]
1072 -- We can use the existing name. For example:
1073 -- [| \x_77 -> x_77 + x_77 |]
1075 -- do { x_77 <- genSym "x"; .... }
1076 -- We use the same x_77 in the desugared program, but with the type Bndr
1079 -- We do make it an Internal name, though (hence localiseName)
1081 -- Nevertheless, it's monadic because we have to generate nameTy
1082 mkGenSyms ns = do { var_ty <- lookupType nameTyConName
1083 ; return [(nm, mkLocalId (localiseName nm) var_ty) | nm <- ns] }
1086 addBinds :: [GenSymBind] -> DsM a -> DsM a
1087 -- Add a list of fresh names for locally bound entities to the
1088 -- meta environment (which is part of the state carried around
1089 -- by the desugarer monad)
1090 addBinds bs m = dsExtendMetaEnv (mkNameEnv [(n,Bound id) | (n,id) <- bs]) m
1092 -- Look up a locally bound name
1094 lookupLBinder :: Located Name -> DsM (Core TH.Name)
1095 lookupLBinder (L _ n) = lookupBinder n
1097 lookupBinder :: Name -> DsM (Core TH.Name)
1099 = do { mb_val <- dsLookupMetaEnv n;
1101 Just (Bound x) -> return (coreVar x)
1102 _ -> failWithDs msg }
1104 msg = ptext (sLit "DsMeta: failed binder lookup when desugaring a TH bracket:") <+> ppr n
1106 -- Look up a name that is either locally bound or a global name
1108 -- * If it is a global name, generate the "original name" representation (ie,
1109 -- the <module>:<name> form) for the associated entity
1111 lookupLOcc :: Located Name -> DsM (Core TH.Name)
1112 -- Lookup an occurrence; it can't be a splice.
1113 -- Use the in-scope bindings if they exist
1114 lookupLOcc (L _ n) = lookupOcc n
1116 lookupOcc :: Name -> DsM (Core TH.Name)
1118 = do { mb_val <- dsLookupMetaEnv n ;
1120 Nothing -> globalVar n
1121 Just (Bound x) -> return (coreVar x)
1122 Just (Splice _) -> pprPanic "repE:lookupOcc" (ppr n)
1125 lookupTvOcc :: Name -> DsM (Core TH.Name)
1126 -- Type variables can't be staged and are not lexically scoped in TH
1128 = do { mb_val <- dsLookupMetaEnv n ;
1130 Just (Bound x) -> return (coreVar x)
1134 msg = vcat [ ptext (sLit "Illegal lexically-scoped type variable") <+> quotes (ppr n)
1135 , ptext (sLit "Lexically scoped type variables are not supported by Template Haskell") ]
1137 globalVar :: Name -> DsM (Core TH.Name)
1138 -- Not bound by the meta-env
1139 -- Could be top-level; or could be local
1140 -- f x = $(g [| x |])
1141 -- Here the x will be local
1143 | isExternalName name
1144 = do { MkC mod <- coreStringLit name_mod
1145 ; MkC pkg <- coreStringLit name_pkg
1146 ; MkC occ <- occNameLit name
1147 ; rep2 mk_varg [pkg,mod,occ] }
1149 = do { MkC occ <- occNameLit name
1150 ; MkC uni <- coreIntLit (getKey (getUnique name))
1151 ; rep2 mkNameLName [occ,uni] }
1153 mod = ASSERT( isExternalName name) nameModule name
1154 name_mod = moduleNameString (moduleName mod)
1155 name_pkg = packageIdString (modulePackageId mod)
1156 name_occ = nameOccName name
1157 mk_varg | OccName.isDataOcc name_occ = mkNameG_dName
1158 | OccName.isVarOcc name_occ = mkNameG_vName
1159 | OccName.isTcOcc name_occ = mkNameG_tcName
1160 | otherwise = pprPanic "DsMeta.globalVar" (ppr name)
1162 lookupType :: Name -- Name of type constructor (e.g. TH.ExpQ)
1163 -> DsM Type -- The type
1164 lookupType tc_name = do { tc <- dsLookupTyCon tc_name ;
1165 return (mkTyConApp tc []) }
1167 wrapGenSyns :: [GenSymBind]
1168 -> Core (TH.Q a) -> DsM (Core (TH.Q a))
1169 -- wrapGenSyns [(nm1,id1), (nm2,id2)] y
1170 -- --> bindQ (gensym nm1) (\ id1 ->
1171 -- bindQ (gensym nm2 (\ id2 ->
1174 wrapGenSyns binds body@(MkC b)
1175 = do { var_ty <- lookupType nameTyConName
1178 [elt_ty] = tcTyConAppArgs (exprType b)
1179 -- b :: Q a, so we can get the type 'a' by looking at the
1180 -- argument type. NB: this relies on Q being a data/newtype,
1181 -- not a type synonym
1183 go _ [] = return body
1184 go var_ty ((name,id) : binds)
1185 = do { MkC body' <- go var_ty binds
1186 ; lit_str <- occNameLit name
1187 ; gensym_app <- repGensym lit_str
1188 ; repBindQ var_ty elt_ty
1189 gensym_app (MkC (Lam id body')) }
1191 -- Just like wrapGenSym, but don't actually do the gensym
1192 -- Instead use the existing name:
1193 -- let x = "x" in ...
1194 -- Only used for [Decl], and for the class ops in class
1195 -- and instance decls
1196 wrapNongenSyms :: [GenSymBind] -> Core a -> DsM (Core a)
1197 wrapNongenSyms binds (MkC body)
1198 = do { binds' <- mapM do_one binds ;
1199 return (MkC (mkLets binds' body)) }
1202 = do { MkC lit_str <- occNameLit name
1203 ; MkC var <- rep2 mkNameName [lit_str]
1204 ; return (NonRec id var) }
1206 occNameLit :: Name -> DsM (Core String)
1207 occNameLit n = coreStringLit (occNameString (nameOccName n))
1210 -- %*********************************************************************
1212 -- Constructing code
1214 -- %*********************************************************************
1216 -----------------------------------------------------------------------------
1217 -- PHANTOM TYPES for consistency. In order to make sure we do this correct
1218 -- we invent a new datatype which uses phantom types.
1220 newtype Core a = MkC CoreExpr
1221 unC :: Core a -> CoreExpr
1224 rep2 :: Name -> [ CoreExpr ] -> DsM (Core a)
1225 rep2 n xs = do { id <- dsLookupGlobalId n
1226 ; return (MkC (foldl App (Var id) xs)) }
1228 -- Then we make "repConstructors" which use the phantom types for each of the
1229 -- smart constructors of the Meta.Meta datatypes.
1232 -- %*********************************************************************
1234 -- The 'smart constructors'
1236 -- %*********************************************************************
1238 --------------- Patterns -----------------
1239 repPlit :: Core TH.Lit -> DsM (Core TH.PatQ)
1240 repPlit (MkC l) = rep2 litPName [l]
1242 repPvar :: Core TH.Name -> DsM (Core TH.PatQ)
1243 repPvar (MkC s) = rep2 varPName [s]
1245 repPtup :: Core [TH.PatQ] -> DsM (Core TH.PatQ)
1246 repPtup (MkC ps) = rep2 tupPName [ps]
1248 repPcon :: Core TH.Name -> Core [TH.PatQ] -> DsM (Core TH.PatQ)
1249 repPcon (MkC s) (MkC ps) = rep2 conPName [s, ps]
1251 repPrec :: Core TH.Name -> Core [(TH.Name,TH.PatQ)] -> DsM (Core TH.PatQ)
1252 repPrec (MkC c) (MkC rps) = rep2 recPName [c,rps]
1254 repPinfix :: Core TH.PatQ -> Core TH.Name -> Core TH.PatQ -> DsM (Core TH.PatQ)
1255 repPinfix (MkC p1) (MkC n) (MkC p2) = rep2 infixPName [p1, n, p2]
1257 repPtilde :: Core TH.PatQ -> DsM (Core TH.PatQ)
1258 repPtilde (MkC p) = rep2 tildePName [p]
1260 repPbang :: Core TH.PatQ -> DsM (Core TH.PatQ)
1261 repPbang (MkC p) = rep2 bangPName [p]
1263 repPaspat :: Core TH.Name -> Core TH.PatQ -> DsM (Core TH.PatQ)
1264 repPaspat (MkC s) (MkC p) = rep2 asPName [s, p]
1266 repPwild :: DsM (Core TH.PatQ)
1267 repPwild = rep2 wildPName []
1269 repPlist :: Core [TH.PatQ] -> DsM (Core TH.PatQ)
1270 repPlist (MkC ps) = rep2 listPName [ps]
1272 --------------- Expressions -----------------
1273 repVarOrCon :: Name -> Core TH.Name -> DsM (Core TH.ExpQ)
1274 repVarOrCon vc str | isDataOcc (nameOccName vc) = repCon str
1275 | otherwise = repVar str
1277 repVar :: Core TH.Name -> DsM (Core TH.ExpQ)
1278 repVar (MkC s) = rep2 varEName [s]
1280 repCon :: Core TH.Name -> DsM (Core TH.ExpQ)
1281 repCon (MkC s) = rep2 conEName [s]
1283 repLit :: Core TH.Lit -> DsM (Core TH.ExpQ)
1284 repLit (MkC c) = rep2 litEName [c]
1286 repApp :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1287 repApp (MkC x) (MkC y) = rep2 appEName [x,y]
1289 repLam :: Core [TH.PatQ] -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1290 repLam (MkC ps) (MkC e) = rep2 lamEName [ps, e]
1292 repTup :: Core [TH.ExpQ] -> DsM (Core TH.ExpQ)
1293 repTup (MkC es) = rep2 tupEName [es]
1295 repCond :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1296 repCond (MkC x) (MkC y) (MkC z) = rep2 condEName [x,y,z]
1298 repLetE :: Core [TH.DecQ] -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1299 repLetE (MkC ds) (MkC e) = rep2 letEName [ds, e]
1301 repCaseE :: Core TH.ExpQ -> Core [TH.MatchQ] -> DsM( Core TH.ExpQ)
1302 repCaseE (MkC e) (MkC ms) = rep2 caseEName [e, ms]
1304 repDoE :: Core [TH.StmtQ] -> DsM (Core TH.ExpQ)
1305 repDoE (MkC ss) = rep2 doEName [ss]
1307 repComp :: Core [TH.StmtQ] -> DsM (Core TH.ExpQ)
1308 repComp (MkC ss) = rep2 compEName [ss]
1310 repListExp :: Core [TH.ExpQ] -> DsM (Core TH.ExpQ)
1311 repListExp (MkC es) = rep2 listEName [es]
1313 repSigExp :: Core TH.ExpQ -> Core TH.TypeQ -> DsM (Core TH.ExpQ)
1314 repSigExp (MkC e) (MkC t) = rep2 sigEName [e,t]
1316 repRecCon :: Core TH.Name -> Core [TH.Q TH.FieldExp]-> DsM (Core TH.ExpQ)
1317 repRecCon (MkC c) (MkC fs) = rep2 recConEName [c,fs]
1319 repRecUpd :: Core TH.ExpQ -> Core [TH.Q TH.FieldExp] -> DsM (Core TH.ExpQ)
1320 repRecUpd (MkC e) (MkC fs) = rep2 recUpdEName [e,fs]
1322 repFieldExp :: Core TH.Name -> Core TH.ExpQ -> DsM (Core (TH.Q TH.FieldExp))
1323 repFieldExp (MkC n) (MkC x) = rep2 fieldExpName [n,x]
1325 repInfixApp :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1326 repInfixApp (MkC x) (MkC y) (MkC z) = rep2 infixAppName [x,y,z]
1328 repSectionL :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1329 repSectionL (MkC x) (MkC y) = rep2 sectionLName [x,y]
1331 repSectionR :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1332 repSectionR (MkC x) (MkC y) = rep2 sectionRName [x,y]
1334 ------------ Right hand sides (guarded expressions) ----
1335 repGuarded :: Core [TH.Q (TH.Guard, TH.Exp)] -> DsM (Core TH.BodyQ)
1336 repGuarded (MkC pairs) = rep2 guardedBName [pairs]
1338 repNormal :: Core TH.ExpQ -> DsM (Core TH.BodyQ)
1339 repNormal (MkC e) = rep2 normalBName [e]
1341 ------------ Guards ----
1342 repLNormalGE :: LHsExpr Name -> LHsExpr Name -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1343 repLNormalGE g e = do g' <- repLE g
1347 repNormalGE :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1348 repNormalGE (MkC g) (MkC e) = rep2 normalGEName [g, e]
1350 repPatGE :: Core [TH.StmtQ] -> Core TH.ExpQ -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1351 repPatGE (MkC ss) (MkC e) = rep2 patGEName [ss, e]
1353 ------------- Stmts -------------------
1354 repBindSt :: Core TH.PatQ -> Core TH.ExpQ -> DsM (Core TH.StmtQ)
1355 repBindSt (MkC p) (MkC e) = rep2 bindSName [p,e]
1357 repLetSt :: Core [TH.DecQ] -> DsM (Core TH.StmtQ)
1358 repLetSt (MkC ds) = rep2 letSName [ds]
1360 repNoBindSt :: Core TH.ExpQ -> DsM (Core TH.StmtQ)
1361 repNoBindSt (MkC e) = rep2 noBindSName [e]
1363 -------------- Range (Arithmetic sequences) -----------
1364 repFrom :: Core TH.ExpQ -> DsM (Core TH.ExpQ)
1365 repFrom (MkC x) = rep2 fromEName [x]
1367 repFromThen :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1368 repFromThen (MkC x) (MkC y) = rep2 fromThenEName [x,y]
1370 repFromTo :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1371 repFromTo (MkC x) (MkC y) = rep2 fromToEName [x,y]
1373 repFromThenTo :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1374 repFromThenTo (MkC x) (MkC y) (MkC z) = rep2 fromThenToEName [x,y,z]
1376 ------------ Match and Clause Tuples -----------
1377 repMatch :: Core TH.PatQ -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.MatchQ)
1378 repMatch (MkC p) (MkC bod) (MkC ds) = rep2 matchName [p, bod, ds]
1380 repClause :: Core [TH.PatQ] -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.ClauseQ)
1381 repClause (MkC ps) (MkC bod) (MkC ds) = rep2 clauseName [ps, bod, ds]
1383 -------------- Dec -----------------------------
1384 repVal :: Core TH.PatQ -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.DecQ)
1385 repVal (MkC p) (MkC b) (MkC ds) = rep2 valDName [p, b, ds]
1387 repFun :: Core TH.Name -> Core [TH.ClauseQ] -> DsM (Core TH.DecQ)
1388 repFun (MkC nm) (MkC b) = rep2 funDName [nm, b]
1390 repData :: 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 repData (MkC cxt) (MkC nm) (MkC tvs) Nothing (MkC cons) (MkC derivs)
1394 = rep2 dataDName [cxt, nm, tvs, cons, derivs]
1395 repData (MkC cxt) (MkC nm) (MkC _) (Just (MkC tys)) (MkC cons) (MkC derivs)
1396 = rep2 dataInstDName [cxt, nm, tys, cons, derivs]
1398 repNewtype :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1399 -> Maybe (Core [TH.TypeQ])
1400 -> Core TH.ConQ -> Core [TH.Name] -> DsM (Core TH.DecQ)
1401 repNewtype (MkC cxt) (MkC nm) (MkC tvs) Nothing (MkC con) (MkC derivs)
1402 = rep2 newtypeDName [cxt, nm, tvs, con, derivs]
1403 repNewtype (MkC cxt) (MkC nm) (MkC _) (Just (MkC tys)) (MkC con) (MkC derivs)
1404 = rep2 newtypeInstDName [cxt, nm, tys, con, derivs]
1406 repTySyn :: Core TH.Name -> Core [TH.TyVarBndr]
1407 -> Maybe (Core [TH.TypeQ])
1408 -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1409 repTySyn (MkC nm) (MkC tvs) Nothing (MkC rhs)
1410 = rep2 tySynDName [nm, tvs, rhs]
1411 repTySyn (MkC nm) (MkC _) (Just (MkC tys)) (MkC rhs)
1412 = rep2 tySynInstDName [nm, tys, rhs]
1414 repInst :: Core TH.CxtQ -> Core TH.TypeQ -> Core [TH.DecQ] -> DsM (Core TH.DecQ)
1415 repInst (MkC cxt) (MkC ty) (MkC ds) = rep2 instanceDName [cxt, ty, ds]
1417 repClass :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1418 -> Core [TH.FunDep] -> Core [TH.DecQ]
1419 -> DsM (Core TH.DecQ)
1420 repClass (MkC cxt) (MkC cls) (MkC tvs) (MkC fds) (MkC ds)
1421 = rep2 classDName [cxt, cls, tvs, fds, ds]
1423 repPragInl :: Core TH.Name -> Core TH.InlineSpecQ -> DsM (Core TH.DecQ)
1424 repPragInl (MkC nm) (MkC ispec) = rep2 pragInlDName [nm, ispec]
1426 repPragSpec :: Core TH.Name -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1427 repPragSpec (MkC nm) (MkC ty) = rep2 pragSpecDName [nm, ty]
1429 repPragSpecInl :: Core TH.Name -> Core TH.TypeQ -> Core TH.InlineSpecQ
1430 -> DsM (Core TH.DecQ)
1431 repPragSpecInl (MkC nm) (MkC ty) (MkC ispec)
1432 = rep2 pragSpecInlDName [nm, ty, ispec]
1434 repFamilyNoKind :: Core TH.FamFlavour -> Core TH.Name -> Core [TH.TyVarBndr]
1435 -> DsM (Core TH.DecQ)
1436 repFamilyNoKind (MkC flav) (MkC nm) (MkC tvs)
1437 = rep2 familyNoKindDName [flav, nm, tvs]
1439 repFamilyKind :: Core TH.FamFlavour -> Core TH.Name -> Core [TH.TyVarBndr]
1441 -> DsM (Core TH.DecQ)
1442 repFamilyKind (MkC flav) (MkC nm) (MkC tvs) (MkC ki)
1443 = rep2 familyKindDName [flav, nm, tvs, ki]
1445 repInlineSpecNoPhase :: Core Bool -> Core Bool -> DsM (Core TH.InlineSpecQ)
1446 repInlineSpecNoPhase (MkC inline) (MkC conlike)
1447 = rep2 inlineSpecNoPhaseName [inline, conlike]
1449 repInlineSpecPhase :: Core Bool -> Core Bool -> Core Bool -> Core Int
1450 -> DsM (Core TH.InlineSpecQ)
1451 repInlineSpecPhase (MkC inline) (MkC conlike) (MkC beforeFrom) (MkC phase)
1452 = rep2 inlineSpecPhaseName [inline, conlike, beforeFrom, phase]
1454 repFunDep :: Core [TH.Name] -> Core [TH.Name] -> DsM (Core TH.FunDep)
1455 repFunDep (MkC xs) (MkC ys) = rep2 funDepName [xs, ys]
1457 repProto :: Core TH.Name -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1458 repProto (MkC s) (MkC ty) = rep2 sigDName [s, ty]
1460 repCtxt :: Core [TH.PredQ] -> DsM (Core TH.CxtQ)
1461 repCtxt (MkC tys) = rep2 cxtName [tys]
1463 repClassP :: Core TH.Name -> Core [TH.TypeQ] -> DsM (Core TH.PredQ)
1464 repClassP (MkC cla) (MkC tys) = rep2 classPName [cla, tys]
1466 repEqualP :: Core TH.TypeQ -> Core TH.TypeQ -> DsM (Core TH.PredQ)
1467 repEqualP (MkC ty1) (MkC ty2) = rep2 equalPName [ty1, ty2]
1469 repConstr :: Core TH.Name -> HsConDeclDetails Name
1470 -> DsM (Core TH.ConQ)
1471 repConstr con (PrefixCon ps)
1472 = do arg_tys <- mapM repBangTy ps
1473 arg_tys1 <- coreList strictTypeQTyConName arg_tys
1474 rep2 normalCName [unC con, unC arg_tys1]
1475 repConstr con (RecCon ips)
1476 = do arg_vs <- mapM lookupLOcc (map cd_fld_name ips)
1477 arg_tys <- mapM repBangTy (map cd_fld_type ips)
1478 arg_vtys <- zipWithM (\x y -> rep2 varStrictTypeName [unC x, unC y])
1480 arg_vtys' <- coreList varStrictTypeQTyConName arg_vtys
1481 rep2 recCName [unC con, unC arg_vtys']
1482 repConstr con (InfixCon st1 st2)
1483 = do arg1 <- repBangTy st1
1484 arg2 <- repBangTy st2
1485 rep2 infixCName [unC arg1, unC con, unC arg2]
1487 ------------ Types -------------------
1489 repTForall :: Core [TH.TyVarBndr] -> Core TH.CxtQ -> Core TH.TypeQ
1490 -> DsM (Core TH.TypeQ)
1491 repTForall (MkC tvars) (MkC ctxt) (MkC ty)
1492 = rep2 forallTName [tvars, ctxt, ty]
1494 repTvar :: Core TH.Name -> DsM (Core TH.TypeQ)
1495 repTvar (MkC s) = rep2 varTName [s]
1497 repTapp :: Core TH.TypeQ -> Core TH.TypeQ -> DsM (Core TH.TypeQ)
1498 repTapp (MkC t1) (MkC t2) = rep2 appTName [t1, t2]
1500 repTapps :: Core TH.TypeQ -> [Core TH.TypeQ] -> DsM (Core TH.TypeQ)
1501 repTapps f [] = return f
1502 repTapps f (t:ts) = do { f1 <- repTapp f t; repTapps f1 ts }
1504 repTSig :: Core TH.TypeQ -> Core TH.Kind -> DsM (Core TH.TypeQ)
1505 repTSig (MkC ty) (MkC ki) = rep2 sigTName [ty, ki]
1507 --------- Type constructors --------------
1509 repNamedTyCon :: Core TH.Name -> DsM (Core TH.TypeQ)
1510 repNamedTyCon (MkC s) = rep2 conTName [s]
1512 repTupleTyCon :: Int -> DsM (Core TH.TypeQ)
1513 -- Note: not Core Int; it's easier to be direct here
1514 repTupleTyCon i = rep2 tupleTName [mkIntExprInt i]
1516 repArrowTyCon :: DsM (Core TH.TypeQ)
1517 repArrowTyCon = rep2 arrowTName []
1519 repListTyCon :: DsM (Core TH.TypeQ)
1520 repListTyCon = rep2 listTName []
1522 ------------ Kinds -------------------
1524 repPlainTV :: Core TH.Name -> DsM (Core TH.TyVarBndr)
1525 repPlainTV (MkC nm) = rep2 plainTVName [nm]
1527 repKindedTV :: Core TH.Name -> Core TH.Kind -> DsM (Core TH.TyVarBndr)
1528 repKindedTV (MkC nm) (MkC ki) = rep2 kindedTVName [nm, ki]
1530 repStarK :: DsM (Core TH.Kind)
1531 repStarK = rep2 starKName []
1533 repArrowK :: Core TH.Kind -> Core TH.Kind -> DsM (Core TH.Kind)
1534 repArrowK (MkC ki1) (MkC ki2) = rep2 arrowKName [ki1, ki2]
1536 ----------------------------------------------------------
1539 repLiteral :: HsLit -> DsM (Core TH.Lit)
1541 = do lit' <- case lit of
1542 HsIntPrim i -> mk_integer i
1543 HsWordPrim w -> mk_integer w
1544 HsInt i -> mk_integer i
1545 HsFloatPrim r -> mk_rational r
1546 HsDoublePrim r -> mk_rational r
1548 lit_expr <- dsLit lit'
1550 Just lit_name -> rep2 lit_name [lit_expr]
1551 Nothing -> notHandled "Exotic literal" (ppr lit)
1553 mb_lit_name = case lit of
1554 HsInteger _ _ -> Just integerLName
1555 HsInt _ -> Just integerLName
1556 HsIntPrim _ -> Just intPrimLName
1557 HsWordPrim _ -> Just wordPrimLName
1558 HsFloatPrim _ -> Just floatPrimLName
1559 HsDoublePrim _ -> Just doublePrimLName
1560 HsChar _ -> Just charLName
1561 HsString _ -> Just stringLName
1562 HsRat _ _ -> Just rationalLName
1565 mk_integer :: Integer -> DsM HsLit
1566 mk_integer i = do integer_ty <- lookupType integerTyConName
1567 return $ HsInteger i integer_ty
1568 mk_rational :: Rational -> DsM HsLit
1569 mk_rational r = do rat_ty <- lookupType rationalTyConName
1570 return $ HsRat r rat_ty
1571 mk_string :: FastString -> DsM HsLit
1572 mk_string s = return $ HsString s
1574 repOverloadedLiteral :: HsOverLit Name -> DsM (Core TH.Lit)
1575 repOverloadedLiteral (OverLit { ol_val = val})
1576 = do { lit <- mk_lit val; repLiteral lit }
1577 -- The type Rational will be in the environment, becuase
1578 -- the smart constructor 'TH.Syntax.rationalL' uses it in its type,
1579 -- and rationalL is sucked in when any TH stuff is used
1581 mk_lit :: OverLitVal -> DsM HsLit
1582 mk_lit (HsIntegral i) = mk_integer i
1583 mk_lit (HsFractional f) = mk_rational f
1584 mk_lit (HsIsString s) = mk_string s
1586 --------------- Miscellaneous -------------------
1588 repGensym :: Core String -> DsM (Core (TH.Q TH.Name))
1589 repGensym (MkC lit_str) = rep2 newNameName [lit_str]
1591 repBindQ :: Type -> Type -- a and b
1592 -> Core (TH.Q a) -> Core (a -> TH.Q b) -> DsM (Core (TH.Q b))
1593 repBindQ ty_a ty_b (MkC x) (MkC y)
1594 = rep2 bindQName [Type ty_a, Type ty_b, x, y]
1596 repSequenceQ :: Type -> Core [TH.Q a] -> DsM (Core (TH.Q [a]))
1597 repSequenceQ ty_a (MkC list)
1598 = rep2 sequenceQName [Type ty_a, list]
1600 ------------ Lists and Tuples -------------------
1601 -- turn a list of patterns into a single pattern matching a list
1603 coreList :: Name -- Of the TyCon of the element type
1604 -> [Core a] -> DsM (Core [a])
1606 = do { elt_ty <- lookupType tc_name; return (coreList' elt_ty es) }
1608 coreList' :: Type -- The element type
1609 -> [Core a] -> Core [a]
1610 coreList' elt_ty es = MkC (mkListExpr elt_ty (map unC es ))
1612 nonEmptyCoreList :: [Core a] -> Core [a]
1613 -- The list must be non-empty so we can get the element type
1614 -- Otherwise use coreList
1615 nonEmptyCoreList [] = panic "coreList: empty argument"
1616 nonEmptyCoreList xs@(MkC x:_) = MkC (mkListExpr (exprType x) (map unC xs))
1618 coreStringLit :: String -> DsM (Core String)
1619 coreStringLit s = do { z <- mkStringExpr s; return(MkC z) }
1621 ------------ Bool, Literals & Variables -------------------
1623 coreBool :: Bool -> Core Bool
1624 coreBool False = MkC $ mkConApp falseDataCon []
1625 coreBool True = MkC $ mkConApp trueDataCon []
1627 coreIntLit :: Int -> DsM (Core Int)
1628 coreIntLit i = return (MkC (mkIntExprInt i))
1630 coreVar :: Id -> Core TH.Name -- The Id has type Name
1631 coreVar id = MkC (Var id)
1633 ----------------- Failure -----------------------
1634 notHandled :: String -> SDoc -> DsM a
1635 notHandled what doc = failWithDs msg
1637 msg = hang (text what <+> ptext (sLit "not (yet) handled by Template Haskell"))
1641 -- %************************************************************************
1643 -- The known-key names for Template Haskell
1645 -- %************************************************************************
1647 -- To add a name, do three things
1649 -- 1) Allocate a key
1651 -- 3) Add the name to knownKeyNames
1653 templateHaskellNames :: [Name]
1654 -- The names that are implicitly mentioned by ``bracket''
1655 -- Should stay in sync with the import list of DsMeta
1657 templateHaskellNames = [
1658 returnQName, bindQName, sequenceQName, newNameName, liftName,
1659 mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName, mkNameLName,
1662 charLName, stringLName, integerLName, intPrimLName, wordPrimLName,
1663 floatPrimLName, doublePrimLName, rationalLName,
1665 litPName, varPName, tupPName, conPName, tildePName, bangPName, infixPName,
1666 asPName, wildPName, recPName, listPName, sigPName,
1674 varEName, conEName, litEName, appEName, infixEName,
1675 infixAppName, sectionLName, sectionRName, lamEName, tupEName,
1676 condEName, letEName, caseEName, doEName, compEName,
1677 fromEName, fromThenEName, fromToEName, fromThenToEName,
1678 listEName, sigEName, recConEName, recUpdEName,
1682 guardedBName, normalBName,
1684 normalGEName, patGEName,
1686 bindSName, letSName, noBindSName, parSName,
1688 funDName, valDName, dataDName, newtypeDName, tySynDName,
1689 classDName, instanceDName, sigDName, forImpDName,
1690 pragInlDName, pragSpecDName, pragSpecInlDName,
1691 familyNoKindDName, familyKindDName, dataInstDName, newtypeInstDName,
1696 classPName, equalPName,
1698 isStrictName, notStrictName,
1700 normalCName, recCName, infixCName, forallCName,
1706 forallTName, varTName, conTName, appTName,
1707 tupleTName, arrowTName, listTName, sigTName,
1709 plainTVName, kindedTVName,
1711 starKName, arrowKName,
1713 cCallName, stdCallName,
1719 inlineSpecNoPhaseName, inlineSpecPhaseName,
1723 typeFamName, dataFamName,
1726 qTyConName, nameTyConName, patTyConName, fieldPatTyConName, matchQTyConName,
1727 clauseQTyConName, expQTyConName, fieldExpTyConName, predTyConName,
1728 stmtQTyConName, decQTyConName, conQTyConName, strictTypeQTyConName,
1729 varStrictTypeQTyConName, typeQTyConName, expTyConName, decTyConName,
1730 typeTyConName, tyVarBndrTyConName, matchTyConName, clauseTyConName,
1731 patQTyConName, fieldPatQTyConName, fieldExpQTyConName, funDepTyConName,
1735 quoteExpName, quotePatName]
1737 thSyn, thLib, qqLib :: Module
1738 thSyn = mkTHModule (fsLit "Language.Haskell.TH.Syntax")
1739 thLib = mkTHModule (fsLit "Language.Haskell.TH.Lib")
1740 qqLib = mkTHModule (fsLit "Language.Haskell.TH.Quote")
1742 mkTHModule :: FastString -> Module
1743 mkTHModule m = mkModule thPackageId (mkModuleNameFS m)
1745 libFun, libTc, thFun, thTc, qqFun :: FastString -> Unique -> Name
1746 libFun = mk_known_key_name OccName.varName thLib
1747 libTc = mk_known_key_name OccName.tcName thLib
1748 thFun = mk_known_key_name OccName.varName thSyn
1749 thTc = mk_known_key_name OccName.tcName thSyn
1750 qqFun = mk_known_key_name OccName.varName qqLib
1752 -------------------- TH.Syntax -----------------------
1753 qTyConName, nameTyConName, fieldExpTyConName, patTyConName,
1754 fieldPatTyConName, expTyConName, decTyConName, typeTyConName,
1755 tyVarBndrTyConName, matchTyConName, clauseTyConName, funDepTyConName,
1756 predTyConName :: Name
1757 qTyConName = thTc (fsLit "Q") qTyConKey
1758 nameTyConName = thTc (fsLit "Name") nameTyConKey
1759 fieldExpTyConName = thTc (fsLit "FieldExp") fieldExpTyConKey
1760 patTyConName = thTc (fsLit "Pat") patTyConKey
1761 fieldPatTyConName = thTc (fsLit "FieldPat") fieldPatTyConKey
1762 expTyConName = thTc (fsLit "Exp") expTyConKey
1763 decTyConName = thTc (fsLit "Dec") decTyConKey
1764 typeTyConName = thTc (fsLit "Type") typeTyConKey
1765 tyVarBndrTyConName= thTc (fsLit "TyVarBndr") tyVarBndrTyConKey
1766 matchTyConName = thTc (fsLit "Match") matchTyConKey
1767 clauseTyConName = thTc (fsLit "Clause") clauseTyConKey
1768 funDepTyConName = thTc (fsLit "FunDep") funDepTyConKey
1769 predTyConName = thTc (fsLit "Pred") predTyConKey
1771 returnQName, bindQName, sequenceQName, newNameName, liftName,
1772 mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName,
1773 mkNameLName, liftStringName :: Name
1774 returnQName = thFun (fsLit "returnQ") returnQIdKey
1775 bindQName = thFun (fsLit "bindQ") bindQIdKey
1776 sequenceQName = thFun (fsLit "sequenceQ") sequenceQIdKey
1777 newNameName = thFun (fsLit "newName") newNameIdKey
1778 liftName = thFun (fsLit "lift") liftIdKey
1779 liftStringName = thFun (fsLit "liftString") liftStringIdKey
1780 mkNameName = thFun (fsLit "mkName") mkNameIdKey
1781 mkNameG_vName = thFun (fsLit "mkNameG_v") mkNameG_vIdKey
1782 mkNameG_dName = thFun (fsLit "mkNameG_d") mkNameG_dIdKey
1783 mkNameG_tcName = thFun (fsLit "mkNameG_tc") mkNameG_tcIdKey
1784 mkNameLName = thFun (fsLit "mkNameL") mkNameLIdKey
1787 -------------------- TH.Lib -----------------------
1789 charLName, stringLName, integerLName, intPrimLName, wordPrimLName,
1790 floatPrimLName, doublePrimLName, rationalLName :: Name
1791 charLName = libFun (fsLit "charL") charLIdKey
1792 stringLName = libFun (fsLit "stringL") stringLIdKey
1793 integerLName = libFun (fsLit "integerL") integerLIdKey
1794 intPrimLName = libFun (fsLit "intPrimL") intPrimLIdKey
1795 wordPrimLName = libFun (fsLit "wordPrimL") wordPrimLIdKey
1796 floatPrimLName = libFun (fsLit "floatPrimL") floatPrimLIdKey
1797 doublePrimLName = libFun (fsLit "doublePrimL") doublePrimLIdKey
1798 rationalLName = libFun (fsLit "rationalL") rationalLIdKey
1801 litPName, varPName, tupPName, conPName, infixPName, tildePName, bangPName,
1802 asPName, wildPName, recPName, listPName, sigPName :: Name
1803 litPName = libFun (fsLit "litP") litPIdKey
1804 varPName = libFun (fsLit "varP") varPIdKey
1805 tupPName = libFun (fsLit "tupP") tupPIdKey
1806 conPName = libFun (fsLit "conP") conPIdKey
1807 infixPName = libFun (fsLit "infixP") infixPIdKey
1808 tildePName = libFun (fsLit "tildeP") tildePIdKey
1809 bangPName = libFun (fsLit "bangP") bangPIdKey
1810 asPName = libFun (fsLit "asP") asPIdKey
1811 wildPName = libFun (fsLit "wildP") wildPIdKey
1812 recPName = libFun (fsLit "recP") recPIdKey
1813 listPName = libFun (fsLit "listP") listPIdKey
1814 sigPName = libFun (fsLit "sigP") sigPIdKey
1816 -- type FieldPat = ...
1817 fieldPatName :: Name
1818 fieldPatName = libFun (fsLit "fieldPat") fieldPatIdKey
1822 matchName = libFun (fsLit "match") matchIdKey
1824 -- data Clause = ...
1826 clauseName = libFun (fsLit "clause") clauseIdKey
1829 varEName, conEName, litEName, appEName, infixEName, infixAppName,
1830 sectionLName, sectionRName, lamEName, tupEName, condEName,
1831 letEName, caseEName, doEName, compEName :: Name
1832 varEName = libFun (fsLit "varE") varEIdKey
1833 conEName = libFun (fsLit "conE") conEIdKey
1834 litEName = libFun (fsLit "litE") litEIdKey
1835 appEName = libFun (fsLit "appE") appEIdKey
1836 infixEName = libFun (fsLit "infixE") infixEIdKey
1837 infixAppName = libFun (fsLit "infixApp") infixAppIdKey
1838 sectionLName = libFun (fsLit "sectionL") sectionLIdKey
1839 sectionRName = libFun (fsLit "sectionR") sectionRIdKey
1840 lamEName = libFun (fsLit "lamE") lamEIdKey
1841 tupEName = libFun (fsLit "tupE") tupEIdKey
1842 condEName = libFun (fsLit "condE") condEIdKey
1843 letEName = libFun (fsLit "letE") letEIdKey
1844 caseEName = libFun (fsLit "caseE") caseEIdKey
1845 doEName = libFun (fsLit "doE") doEIdKey
1846 compEName = libFun (fsLit "compE") compEIdKey
1847 -- ArithSeq skips a level
1848 fromEName, fromThenEName, fromToEName, fromThenToEName :: Name
1849 fromEName = libFun (fsLit "fromE") fromEIdKey
1850 fromThenEName = libFun (fsLit "fromThenE") fromThenEIdKey
1851 fromToEName = libFun (fsLit "fromToE") fromToEIdKey
1852 fromThenToEName = libFun (fsLit "fromThenToE") fromThenToEIdKey
1854 listEName, sigEName, recConEName, recUpdEName :: Name
1855 listEName = libFun (fsLit "listE") listEIdKey
1856 sigEName = libFun (fsLit "sigE") sigEIdKey
1857 recConEName = libFun (fsLit "recConE") recConEIdKey
1858 recUpdEName = libFun (fsLit "recUpdE") recUpdEIdKey
1860 -- type FieldExp = ...
1861 fieldExpName :: Name
1862 fieldExpName = libFun (fsLit "fieldExp") fieldExpIdKey
1865 guardedBName, normalBName :: Name
1866 guardedBName = libFun (fsLit "guardedB") guardedBIdKey
1867 normalBName = libFun (fsLit "normalB") normalBIdKey
1870 normalGEName, patGEName :: Name
1871 normalGEName = libFun (fsLit "normalGE") normalGEIdKey
1872 patGEName = libFun (fsLit "patGE") patGEIdKey
1875 bindSName, letSName, noBindSName, parSName :: Name
1876 bindSName = libFun (fsLit "bindS") bindSIdKey
1877 letSName = libFun (fsLit "letS") letSIdKey
1878 noBindSName = libFun (fsLit "noBindS") noBindSIdKey
1879 parSName = libFun (fsLit "parS") parSIdKey
1882 funDName, valDName, dataDName, newtypeDName, tySynDName, classDName,
1883 instanceDName, sigDName, forImpDName, pragInlDName, pragSpecDName,
1884 pragSpecInlDName, familyNoKindDName, familyKindDName, dataInstDName,
1885 newtypeInstDName, tySynInstDName :: Name
1886 funDName = libFun (fsLit "funD") funDIdKey
1887 valDName = libFun (fsLit "valD") valDIdKey
1888 dataDName = libFun (fsLit "dataD") dataDIdKey
1889 newtypeDName = libFun (fsLit "newtypeD") newtypeDIdKey
1890 tySynDName = libFun (fsLit "tySynD") tySynDIdKey
1891 classDName = libFun (fsLit "classD") classDIdKey
1892 instanceDName = libFun (fsLit "instanceD") instanceDIdKey
1893 sigDName = libFun (fsLit "sigD") sigDIdKey
1894 forImpDName = libFun (fsLit "forImpD") forImpDIdKey
1895 pragInlDName = libFun (fsLit "pragInlD") pragInlDIdKey
1896 pragSpecDName = libFun (fsLit "pragSpecD") pragSpecDIdKey
1897 pragSpecInlDName = libFun (fsLit "pragSpecInlD") pragSpecInlDIdKey
1898 familyNoKindDName= libFun (fsLit "familyNoKindD")familyNoKindDIdKey
1899 familyKindDName = libFun (fsLit "familyKindD") familyKindDIdKey
1900 dataInstDName = libFun (fsLit "dataInstD") dataInstDIdKey
1901 newtypeInstDName = libFun (fsLit "newtypeInstD") newtypeInstDIdKey
1902 tySynInstDName = libFun (fsLit "tySynInstD") tySynInstDIdKey
1906 cxtName = libFun (fsLit "cxt") cxtIdKey
1909 classPName, equalPName :: Name
1910 classPName = libFun (fsLit "classP") classPIdKey
1911 equalPName = libFun (fsLit "equalP") equalPIdKey
1913 -- data Strict = ...
1914 isStrictName, notStrictName :: Name
1915 isStrictName = libFun (fsLit "isStrict") isStrictKey
1916 notStrictName = libFun (fsLit "notStrict") notStrictKey
1919 normalCName, recCName, infixCName, forallCName :: Name
1920 normalCName = libFun (fsLit "normalC") normalCIdKey
1921 recCName = libFun (fsLit "recC") recCIdKey
1922 infixCName = libFun (fsLit "infixC") infixCIdKey
1923 forallCName = libFun (fsLit "forallC") forallCIdKey
1925 -- type StrictType = ...
1926 strictTypeName :: Name
1927 strictTypeName = libFun (fsLit "strictType") strictTKey
1929 -- type VarStrictType = ...
1930 varStrictTypeName :: Name
1931 varStrictTypeName = libFun (fsLit "varStrictType") varStrictTKey
1934 forallTName, varTName, conTName, tupleTName, arrowTName,
1935 listTName, appTName, sigTName :: Name
1936 forallTName = libFun (fsLit "forallT") forallTIdKey
1937 varTName = libFun (fsLit "varT") varTIdKey
1938 conTName = libFun (fsLit "conT") conTIdKey
1939 tupleTName = libFun (fsLit "tupleT") tupleTIdKey
1940 arrowTName = libFun (fsLit "arrowT") arrowTIdKey
1941 listTName = libFun (fsLit "listT") listTIdKey
1942 appTName = libFun (fsLit "appT") appTIdKey
1943 sigTName = libFun (fsLit "sigT") sigTIdKey
1945 -- data TyVarBndr = ...
1946 plainTVName, kindedTVName :: Name
1947 plainTVName = libFun (fsLit "plainTV") plainTVIdKey
1948 kindedTVName = libFun (fsLit "kindedTV") kindedTVIdKey
1951 starKName, arrowKName :: Name
1952 starKName = libFun (fsLit "starK") starKIdKey
1953 arrowKName = libFun (fsLit "arrowK") arrowKIdKey
1955 -- data Callconv = ...
1956 cCallName, stdCallName :: Name
1957 cCallName = libFun (fsLit "cCall") cCallIdKey
1958 stdCallName = libFun (fsLit "stdCall") stdCallIdKey
1960 -- data Safety = ...
1961 unsafeName, safeName, threadsafeName :: Name
1962 unsafeName = libFun (fsLit "unsafe") unsafeIdKey
1963 safeName = libFun (fsLit "safe") safeIdKey
1964 threadsafeName = libFun (fsLit "threadsafe") threadsafeIdKey
1966 -- data InlineSpec = ...
1967 inlineSpecNoPhaseName, inlineSpecPhaseName :: Name
1968 inlineSpecNoPhaseName = libFun (fsLit "inlineSpecNoPhase") inlineSpecNoPhaseIdKey
1969 inlineSpecPhaseName = libFun (fsLit "inlineSpecPhase") inlineSpecPhaseIdKey
1971 -- data FunDep = ...
1973 funDepName = libFun (fsLit "funDep") funDepIdKey
1975 -- data FamFlavour = ...
1976 typeFamName, dataFamName :: Name
1977 typeFamName = libFun (fsLit "typeFam") typeFamIdKey
1978 dataFamName = libFun (fsLit "dataFam") dataFamIdKey
1980 matchQTyConName, clauseQTyConName, expQTyConName, stmtQTyConName,
1981 decQTyConName, conQTyConName, strictTypeQTyConName,
1982 varStrictTypeQTyConName, typeQTyConName, fieldExpQTyConName,
1983 patQTyConName, fieldPatQTyConName, predQTyConName :: Name
1984 matchQTyConName = libTc (fsLit "MatchQ") matchQTyConKey
1985 clauseQTyConName = libTc (fsLit "ClauseQ") clauseQTyConKey
1986 expQTyConName = libTc (fsLit "ExpQ") expQTyConKey
1987 stmtQTyConName = libTc (fsLit "StmtQ") stmtQTyConKey
1988 decQTyConName = libTc (fsLit "DecQ") decQTyConKey
1989 conQTyConName = libTc (fsLit "ConQ") conQTyConKey
1990 strictTypeQTyConName = libTc (fsLit "StrictTypeQ") strictTypeQTyConKey
1991 varStrictTypeQTyConName = libTc (fsLit "VarStrictTypeQ") varStrictTypeQTyConKey
1992 typeQTyConName = libTc (fsLit "TypeQ") typeQTyConKey
1993 fieldExpQTyConName = libTc (fsLit "FieldExpQ") fieldExpQTyConKey
1994 patQTyConName = libTc (fsLit "PatQ") patQTyConKey
1995 fieldPatQTyConName = libTc (fsLit "FieldPatQ") fieldPatQTyConKey
1996 predQTyConName = libTc (fsLit "PredQ") predQTyConKey
1999 quoteExpName, quotePatName :: Name
2000 quoteExpName = qqFun (fsLit "quoteExp") quoteExpKey
2001 quotePatName = qqFun (fsLit "quotePat") quotePatKey
2003 -- TyConUniques available: 100-129
2004 -- Check in PrelNames if you want to change this
2006 expTyConKey, matchTyConKey, clauseTyConKey, qTyConKey, expQTyConKey,
2007 decQTyConKey, patTyConKey, matchQTyConKey, clauseQTyConKey,
2008 stmtQTyConKey, conQTyConKey, typeQTyConKey, typeTyConKey, tyVarBndrTyConKey,
2009 decTyConKey, varStrictTypeQTyConKey, strictTypeQTyConKey,
2010 fieldExpTyConKey, fieldPatTyConKey, nameTyConKey, patQTyConKey,
2011 fieldPatQTyConKey, fieldExpQTyConKey, funDepTyConKey, predTyConKey,
2012 predQTyConKey :: Unique
2013 expTyConKey = mkPreludeTyConUnique 100
2014 matchTyConKey = mkPreludeTyConUnique 101
2015 clauseTyConKey = mkPreludeTyConUnique 102
2016 qTyConKey = mkPreludeTyConUnique 103
2017 expQTyConKey = mkPreludeTyConUnique 104
2018 decQTyConKey = mkPreludeTyConUnique 105
2019 patTyConKey = mkPreludeTyConUnique 106
2020 matchQTyConKey = mkPreludeTyConUnique 107
2021 clauseQTyConKey = mkPreludeTyConUnique 108
2022 stmtQTyConKey = mkPreludeTyConUnique 109
2023 conQTyConKey = mkPreludeTyConUnique 110
2024 typeQTyConKey = mkPreludeTyConUnique 111
2025 typeTyConKey = mkPreludeTyConUnique 112
2026 tyVarBndrTyConKey = mkPreludeTyConUnique 125
2027 decTyConKey = mkPreludeTyConUnique 113
2028 varStrictTypeQTyConKey = mkPreludeTyConUnique 114
2029 strictTypeQTyConKey = mkPreludeTyConUnique 115
2030 fieldExpTyConKey = mkPreludeTyConUnique 116
2031 fieldPatTyConKey = mkPreludeTyConUnique 117
2032 nameTyConKey = mkPreludeTyConUnique 118
2033 patQTyConKey = mkPreludeTyConUnique 119
2034 fieldPatQTyConKey = mkPreludeTyConUnique 120
2035 fieldExpQTyConKey = mkPreludeTyConUnique 121
2036 funDepTyConKey = mkPreludeTyConUnique 122
2037 predTyConKey = mkPreludeTyConUnique 123
2038 predQTyConKey = mkPreludeTyConUnique 124
2040 -- IdUniques available: 200-399
2041 -- If you want to change this, make sure you check in PrelNames
2043 returnQIdKey, bindQIdKey, sequenceQIdKey, liftIdKey, newNameIdKey,
2044 mkNameIdKey, mkNameG_vIdKey, mkNameG_dIdKey, mkNameG_tcIdKey,
2045 mkNameLIdKey :: Unique
2046 returnQIdKey = mkPreludeMiscIdUnique 200
2047 bindQIdKey = mkPreludeMiscIdUnique 201
2048 sequenceQIdKey = mkPreludeMiscIdUnique 202
2049 liftIdKey = mkPreludeMiscIdUnique 203
2050 newNameIdKey = mkPreludeMiscIdUnique 204
2051 mkNameIdKey = mkPreludeMiscIdUnique 205
2052 mkNameG_vIdKey = mkPreludeMiscIdUnique 206
2053 mkNameG_dIdKey = mkPreludeMiscIdUnique 207
2054 mkNameG_tcIdKey = mkPreludeMiscIdUnique 208
2055 mkNameLIdKey = mkPreludeMiscIdUnique 209
2059 charLIdKey, stringLIdKey, integerLIdKey, intPrimLIdKey, wordPrimLIdKey,
2060 floatPrimLIdKey, doublePrimLIdKey, rationalLIdKey :: Unique
2061 charLIdKey = mkPreludeMiscIdUnique 210
2062 stringLIdKey = mkPreludeMiscIdUnique 211
2063 integerLIdKey = mkPreludeMiscIdUnique 212
2064 intPrimLIdKey = mkPreludeMiscIdUnique 213
2065 wordPrimLIdKey = mkPreludeMiscIdUnique 214
2066 floatPrimLIdKey = mkPreludeMiscIdUnique 215
2067 doublePrimLIdKey = mkPreludeMiscIdUnique 216
2068 rationalLIdKey = mkPreludeMiscIdUnique 217
2070 liftStringIdKey :: Unique
2071 liftStringIdKey = mkPreludeMiscIdUnique 218
2074 litPIdKey, varPIdKey, tupPIdKey, conPIdKey, infixPIdKey, tildePIdKey, bangPIdKey,
2075 asPIdKey, wildPIdKey, recPIdKey, listPIdKey, sigPIdKey :: Unique
2076 litPIdKey = mkPreludeMiscIdUnique 220
2077 varPIdKey = mkPreludeMiscIdUnique 221
2078 tupPIdKey = mkPreludeMiscIdUnique 222
2079 conPIdKey = mkPreludeMiscIdUnique 223
2080 infixPIdKey = mkPreludeMiscIdUnique 312
2081 tildePIdKey = mkPreludeMiscIdUnique 224
2082 bangPIdKey = mkPreludeMiscIdUnique 359
2083 asPIdKey = mkPreludeMiscIdUnique 225
2084 wildPIdKey = mkPreludeMiscIdUnique 226
2085 recPIdKey = mkPreludeMiscIdUnique 227
2086 listPIdKey = mkPreludeMiscIdUnique 228
2087 sigPIdKey = mkPreludeMiscIdUnique 229
2089 -- type FieldPat = ...
2090 fieldPatIdKey :: Unique
2091 fieldPatIdKey = mkPreludeMiscIdUnique 230
2094 matchIdKey :: Unique
2095 matchIdKey = mkPreludeMiscIdUnique 231
2097 -- data Clause = ...
2098 clauseIdKey :: Unique
2099 clauseIdKey = mkPreludeMiscIdUnique 232
2103 varEIdKey, conEIdKey, litEIdKey, appEIdKey, infixEIdKey, infixAppIdKey,
2104 sectionLIdKey, sectionRIdKey, lamEIdKey, tupEIdKey, condEIdKey,
2105 letEIdKey, caseEIdKey, doEIdKey, compEIdKey,
2106 fromEIdKey, fromThenEIdKey, fromToEIdKey, fromThenToEIdKey,
2107 listEIdKey, sigEIdKey, recConEIdKey, recUpdEIdKey :: Unique
2108 varEIdKey = mkPreludeMiscIdUnique 240
2109 conEIdKey = mkPreludeMiscIdUnique 241
2110 litEIdKey = mkPreludeMiscIdUnique 242
2111 appEIdKey = mkPreludeMiscIdUnique 243
2112 infixEIdKey = mkPreludeMiscIdUnique 244
2113 infixAppIdKey = mkPreludeMiscIdUnique 245
2114 sectionLIdKey = mkPreludeMiscIdUnique 246
2115 sectionRIdKey = mkPreludeMiscIdUnique 247
2116 lamEIdKey = mkPreludeMiscIdUnique 248
2117 tupEIdKey = mkPreludeMiscIdUnique 249
2118 condEIdKey = mkPreludeMiscIdUnique 250
2119 letEIdKey = mkPreludeMiscIdUnique 251
2120 caseEIdKey = mkPreludeMiscIdUnique 252
2121 doEIdKey = mkPreludeMiscIdUnique 253
2122 compEIdKey = mkPreludeMiscIdUnique 254
2123 fromEIdKey = mkPreludeMiscIdUnique 255
2124 fromThenEIdKey = mkPreludeMiscIdUnique 256
2125 fromToEIdKey = mkPreludeMiscIdUnique 257
2126 fromThenToEIdKey = mkPreludeMiscIdUnique 258
2127 listEIdKey = mkPreludeMiscIdUnique 259
2128 sigEIdKey = mkPreludeMiscIdUnique 260
2129 recConEIdKey = mkPreludeMiscIdUnique 261
2130 recUpdEIdKey = mkPreludeMiscIdUnique 262
2132 -- type FieldExp = ...
2133 fieldExpIdKey :: Unique
2134 fieldExpIdKey = mkPreludeMiscIdUnique 265
2137 guardedBIdKey, normalBIdKey :: Unique
2138 guardedBIdKey = mkPreludeMiscIdUnique 266
2139 normalBIdKey = mkPreludeMiscIdUnique 267
2142 normalGEIdKey, patGEIdKey :: Unique
2143 normalGEIdKey = mkPreludeMiscIdUnique 310
2144 patGEIdKey = mkPreludeMiscIdUnique 311
2147 bindSIdKey, letSIdKey, noBindSIdKey, parSIdKey :: Unique
2148 bindSIdKey = mkPreludeMiscIdUnique 268
2149 letSIdKey = mkPreludeMiscIdUnique 269
2150 noBindSIdKey = mkPreludeMiscIdUnique 270
2151 parSIdKey = mkPreludeMiscIdUnique 271
2154 funDIdKey, valDIdKey, dataDIdKey, newtypeDIdKey, tySynDIdKey,
2155 classDIdKey, instanceDIdKey, sigDIdKey, forImpDIdKey, pragInlDIdKey,
2156 pragSpecDIdKey, pragSpecInlDIdKey, familyNoKindDIdKey, familyKindDIdKey,
2157 dataInstDIdKey, newtypeInstDIdKey, tySynInstDIdKey :: Unique
2158 funDIdKey = mkPreludeMiscIdUnique 272
2159 valDIdKey = mkPreludeMiscIdUnique 273
2160 dataDIdKey = mkPreludeMiscIdUnique 274
2161 newtypeDIdKey = mkPreludeMiscIdUnique 275
2162 tySynDIdKey = mkPreludeMiscIdUnique 276
2163 classDIdKey = mkPreludeMiscIdUnique 277
2164 instanceDIdKey = mkPreludeMiscIdUnique 278
2165 sigDIdKey = mkPreludeMiscIdUnique 279
2166 forImpDIdKey = mkPreludeMiscIdUnique 297
2167 pragInlDIdKey = mkPreludeMiscIdUnique 348
2168 pragSpecDIdKey = mkPreludeMiscIdUnique 349
2169 pragSpecInlDIdKey = mkPreludeMiscIdUnique 352
2170 familyNoKindDIdKey= mkPreludeMiscIdUnique 340
2171 familyKindDIdKey = mkPreludeMiscIdUnique 353
2172 dataInstDIdKey = mkPreludeMiscIdUnique 341
2173 newtypeInstDIdKey = mkPreludeMiscIdUnique 342
2174 tySynInstDIdKey = mkPreludeMiscIdUnique 343
2178 cxtIdKey = mkPreludeMiscIdUnique 280
2181 classPIdKey, equalPIdKey :: Unique
2182 classPIdKey = mkPreludeMiscIdUnique 346
2183 equalPIdKey = mkPreludeMiscIdUnique 347
2185 -- data Strict = ...
2186 isStrictKey, notStrictKey :: Unique
2187 isStrictKey = mkPreludeMiscIdUnique 281
2188 notStrictKey = mkPreludeMiscIdUnique 282
2191 normalCIdKey, recCIdKey, infixCIdKey, forallCIdKey :: Unique
2192 normalCIdKey = mkPreludeMiscIdUnique 283
2193 recCIdKey = mkPreludeMiscIdUnique 284
2194 infixCIdKey = mkPreludeMiscIdUnique 285
2195 forallCIdKey = mkPreludeMiscIdUnique 288
2197 -- type StrictType = ...
2198 strictTKey :: Unique
2199 strictTKey = mkPreludeMiscIdUnique 286
2201 -- type VarStrictType = ...
2202 varStrictTKey :: Unique
2203 varStrictTKey = mkPreludeMiscIdUnique 287
2206 forallTIdKey, varTIdKey, conTIdKey, tupleTIdKey, arrowTIdKey,
2207 listTIdKey, appTIdKey, sigTIdKey :: Unique
2208 forallTIdKey = mkPreludeMiscIdUnique 290
2209 varTIdKey = mkPreludeMiscIdUnique 291
2210 conTIdKey = mkPreludeMiscIdUnique 292
2211 tupleTIdKey = mkPreludeMiscIdUnique 294
2212 arrowTIdKey = mkPreludeMiscIdUnique 295
2213 listTIdKey = mkPreludeMiscIdUnique 296
2214 appTIdKey = mkPreludeMiscIdUnique 293
2215 sigTIdKey = mkPreludeMiscIdUnique 358
2217 -- data TyVarBndr = ...
2218 plainTVIdKey, kindedTVIdKey :: Unique
2219 plainTVIdKey = mkPreludeMiscIdUnique 354
2220 kindedTVIdKey = mkPreludeMiscIdUnique 355
2223 starKIdKey, arrowKIdKey :: Unique
2224 starKIdKey = mkPreludeMiscIdUnique 356
2225 arrowKIdKey = mkPreludeMiscIdUnique 357
2227 -- data Callconv = ...
2228 cCallIdKey, stdCallIdKey :: Unique
2229 cCallIdKey = mkPreludeMiscIdUnique 300
2230 stdCallIdKey = mkPreludeMiscIdUnique 301
2232 -- data Safety = ...
2233 unsafeIdKey, safeIdKey, threadsafeIdKey :: Unique
2234 unsafeIdKey = mkPreludeMiscIdUnique 305
2235 safeIdKey = mkPreludeMiscIdUnique 306
2236 threadsafeIdKey = mkPreludeMiscIdUnique 307
2238 -- data InlineSpec =
2239 inlineSpecNoPhaseIdKey, inlineSpecPhaseIdKey :: Unique
2240 inlineSpecNoPhaseIdKey = mkPreludeMiscIdUnique 350
2241 inlineSpecPhaseIdKey = mkPreludeMiscIdUnique 351
2243 -- data FunDep = ...
2244 funDepIdKey :: Unique
2245 funDepIdKey = mkPreludeMiscIdUnique 320
2247 -- data FamFlavour = ...
2248 typeFamIdKey, dataFamIdKey :: Unique
2249 typeFamIdKey = mkPreludeMiscIdUnique 344
2250 dataFamIdKey = mkPreludeMiscIdUnique 345
2253 quoteExpKey, quotePatKey :: Unique
2254 quoteExpKey = mkPreludeMiscIdUnique 321
2255 quotePatKey = mkPreludeMiscIdUnique 322