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 {-# OPTIONS -fno-warn-unused-imports #-}
17 -- The above warning supression flag is a temporary kludge.
18 -- While working on this module you are encouraged to remove it and fix
19 -- any warnings in the module. See
20 -- http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
22 -- The kludge is only needed in this module because of trac #2267.
24 module DsMeta( dsBracket,
25 templateHaskellNames, qTyConName, nameTyConName,
26 liftName, liftStringName, expQTyConName, patQTyConName, decQTyConName, typeQTyConName,
27 decTyConName, typeTyConName, mkNameG_dName, mkNameG_vName, mkNameG_tcName,
28 quoteExpName, quotePatName
31 #include "HsVersions.h"
33 import {-# SOURCE #-} DsExpr ( dsExpr )
39 import qualified Language.Haskell.TH as TH
44 -- To avoid clashes with DsMeta.varName we must make a local alias for
45 -- OccName.varName we do this by removing varName from the import of
46 -- OccName above, making a qualified instance of OccName and using
47 -- OccNameAlias.varName where varName ws previously used in this file.
48 import qualified OccName
73 -----------------------------------------------------------------------------
74 dsBracket :: HsBracket Name -> [PendingSplice] -> DsM CoreExpr
75 -- Returns a CoreExpr of type TH.ExpQ
76 -- The quoted thing is parameterised over Name, even though it has
77 -- been type checked. We don't want all those type decorations!
79 dsBracket brack splices
80 = dsExtendMetaEnv new_bit (do_brack brack)
82 new_bit = mkNameEnv [(n, Splice (unLoc e)) | (n,e) <- splices]
84 do_brack (VarBr n) = do { MkC e1 <- lookupOcc n ; return e1 }
85 do_brack (ExpBr e) = do { MkC e1 <- repLE e ; return e1 }
86 do_brack (PatBr p) = do { MkC p1 <- repLP p ; return p1 }
87 do_brack (TypBr t) = do { MkC t1 <- repLTy t ; return t1 }
88 do_brack (DecBr ds) = do { MkC ds1 <- repTopDs ds ; return ds1 }
90 {- -------------- Examples --------------------
94 gensym (unpackString "x"#) `bindQ` \ x1::String ->
95 lam (pvar x1) (var x1)
98 [| \x -> $(f [| x |]) |]
100 gensym (unpackString "x"#) `bindQ` \ x1::String ->
101 lam (pvar x1) (f (var x1))
105 -------------------------------------------------------
107 -------------------------------------------------------
109 repTopDs :: HsGroup Name -> DsM (Core (TH.Q [TH.Dec]))
111 = do { let { bndrs = map unLoc (groupBinders group) } ;
112 ss <- mkGenSyms bndrs ;
114 -- Bind all the names mainly to avoid repeated use of explicit strings.
116 -- do { t :: String <- genSym "T" ;
117 -- return (Data t [] ...more t's... }
118 -- The other important reason is that the output must mention
119 -- only "T", not "Foo:T" where Foo is the current module
122 decls <- addBinds ss (do {
123 val_ds <- rep_val_binds (hs_valds group) ;
124 tycl_ds <- mapM repTyClD (hs_tyclds group) ;
125 inst_ds <- mapM repInstD' (hs_instds group) ;
126 for_ds <- mapM repForD (hs_fords group) ;
128 return (de_loc $ sort_by_loc $ val_ds ++ catMaybes tycl_ds ++ inst_ds ++ for_ds) }) ;
130 decl_ty <- lookupType decQTyConName ;
131 let { core_list = coreList' decl_ty decls } ;
133 dec_ty <- lookupType decTyConName ;
134 q_decs <- repSequenceQ dec_ty core_list ;
136 wrapNongenSyms ss q_decs
137 -- Do *not* gensym top-level binders
140 groupBinders :: HsGroup Name -> [Located Name]
141 groupBinders (HsGroup { hs_valds = val_decls, hs_tyclds = tycl_decls,
142 hs_instds = inst_decls, hs_fords = foreign_decls })
143 -- Collect the binders of a Group
144 = collectHsValBinders val_decls ++
145 [n | d <- tycl_decls ++ assoc_tycl_decls, n <- tyClDeclNames (unLoc d)] ++
146 [n | L _ (ForeignImport n _ _) <- foreign_decls]
148 assoc_tycl_decls = concat [ats | L _ (InstDecl _ _ _ ats) <- inst_decls]
151 {- Note [Binders and occurrences]
152 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
153 When we desugar [d| data T = MkT |]
155 Data "T" [] [Con "MkT" []] []
157 Data "Foo:T" [] [Con "Foo:MkT" []] []
158 That is, the new data decl should fit into whatever new module it is
159 asked to fit in. We do *not* clone, though; no need for this:
166 then we must desugar to
167 foo = Data "Foo:T" [] [Con "Foo:MkT" []] []
169 So in repTopDs we bring the binders into scope with mkGenSyms and addBinds.
170 And we use lookupOcc, rather than lookupBinder
171 in repTyClD and repC.
175 repTyClD :: LTyClDecl Name -> DsM (Maybe (SrcSpan, Core TH.DecQ))
177 repTyClD tydecl@(L _ (TyFamily {}))
178 = repTyFamily tydecl addTyVarBinds
180 repTyClD (L loc (TyData { tcdND = DataType, tcdCtxt = cxt,
181 tcdLName = tc, tcdTyVars = tvs, tcdTyPats = opt_tys,
182 tcdCons = cons, tcdDerivs = mb_derivs }))
183 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
184 ; dec <- addTyVarBinds tvs $ \bndrs ->
185 do { cxt1 <- repLContext cxt
186 ; opt_tys1 <- maybeMapM repLTys opt_tys -- only for family insts
187 ; opt_tys2 <- maybeMapM (coreList typeQTyConName) opt_tys1
188 ; cons1 <- mapM repC cons
189 ; cons2 <- coreList conQTyConName cons1
190 ; derivs1 <- repDerivs mb_derivs
191 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
192 ; repData cxt1 tc1 bndrs1 opt_tys2 cons2 derivs1
194 ; return $ Just (loc, dec)
197 repTyClD (L loc (TyData { tcdND = NewType, tcdCtxt = cxt,
198 tcdLName = tc, tcdTyVars = tvs, tcdTyPats = opt_tys,
199 tcdCons = [con], tcdDerivs = mb_derivs }))
200 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
201 ; dec <- addTyVarBinds tvs $ \bndrs ->
202 do { cxt1 <- repLContext cxt
203 ; opt_tys1 <- maybeMapM repLTys opt_tys -- only for family insts
204 ; opt_tys2 <- maybeMapM (coreList typeQTyConName) opt_tys1
206 ; derivs1 <- repDerivs mb_derivs
207 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
208 ; repNewtype cxt1 tc1 bndrs1 opt_tys2 con1 derivs1
210 ; return $ Just (loc, dec)
213 repTyClD (L loc (TySynonym { tcdLName = tc, tcdTyVars = tvs, tcdTyPats = opt_tys,
215 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
216 ; dec <- addTyVarBinds tvs $ \bndrs ->
217 do { opt_tys1 <- maybeMapM repLTys opt_tys -- only for family insts
218 ; opt_tys2 <- maybeMapM (coreList typeQTyConName) opt_tys1
220 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
221 ; repTySyn tc1 bndrs1 opt_tys2 ty1
223 ; return (Just (loc, dec))
226 repTyClD (L loc (ClassDecl { tcdCtxt = cxt, tcdLName = cls,
227 tcdTyVars = tvs, tcdFDs = fds,
228 tcdSigs = sigs, tcdMeths = meth_binds,
230 = do { cls1 <- lookupLOcc cls -- See note [Binders and occurrences]
231 ; dec <- addTyVarBinds tvs $ \bndrs ->
232 do { cxt1 <- repLContext cxt
233 ; sigs1 <- rep_sigs sigs
234 ; binds1 <- rep_binds meth_binds
235 ; fds1 <- repLFunDeps fds
236 ; ats1 <- repLAssocFamilys ats
237 ; decls1 <- coreList decQTyConName (ats1 ++ sigs1 ++ binds1)
238 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
239 ; repClass cxt1 cls1 bndrs1 fds1 decls1
241 ; return $ Just (loc, dec)
245 repTyClD (L loc d) = putSrcSpanDs loc $
246 do { warnDs (hang ds_msg 4 (ppr d))
249 -- The type variables in the head of families are treated differently when the
250 -- family declaration is associated. In that case, they are usage, not binding
253 repTyFamily :: LTyClDecl Name
254 -> ProcessTyVarBinds TH.Dec
255 -> DsM (Maybe (SrcSpan, Core TH.DecQ))
256 repTyFamily (L loc (TyFamily { tcdFlavour = flavour,
257 tcdLName = tc, tcdTyVars = tvs,
258 tcdKind = opt_kind }))
260 = do { tc1 <- lookupLOcc tc -- See note [Binders and occurrences]
261 ; dec <- tyVarBinds tvs $ \bndrs ->
262 do { flav <- repFamilyFlavour flavour
263 ; bndrs1 <- coreList tyVarBndrTyConName bndrs
265 Nothing -> repFamilyNoKind flav tc1 bndrs1
266 Just ki -> do { ki1 <- repKind ki
267 ; repFamilyKind flav tc1 bndrs1 ki1
270 ; return $ Just (loc, dec)
272 repTyFamily _ _ = panic "DsMeta.repTyFamily: internal error"
276 repLFunDeps :: [Located (FunDep Name)] -> DsM (Core [TH.FunDep])
277 repLFunDeps fds = do fds' <- mapM repLFunDep fds
278 fdList <- coreList funDepTyConName fds'
281 repLFunDep :: Located (FunDep Name) -> DsM (Core TH.FunDep)
282 repLFunDep (L _ (xs, ys)) = do xs' <- mapM lookupBinder xs
283 ys' <- mapM lookupBinder ys
284 xs_list <- coreList nameTyConName xs'
285 ys_list <- coreList nameTyConName ys'
286 repFunDep xs_list ys_list
288 -- represent family declaration flavours
290 repFamilyFlavour :: FamilyFlavour -> DsM (Core TH.FamFlavour)
291 repFamilyFlavour TypeFamily = rep2 typeFamName []
292 repFamilyFlavour DataFamily = rep2 dataFamName []
294 -- represent associated family declarations
296 repLAssocFamilys :: [LTyClDecl Name] -> DsM [Core TH.DecQ]
297 repLAssocFamilys = mapM repLAssocFamily
299 repLAssocFamily tydecl@(L _ (TyFamily {}))
300 = liftM (snd . fromJust) $ repTyFamily tydecl lookupTyVarBinds
301 repLAssocFamily tydecl
304 msg = ptext (sLit "Illegal associated declaration in class:") <+>
307 -- represent associated family instances
309 repLAssocFamInst :: [LTyClDecl Name] -> DsM [Core TH.DecQ]
310 repLAssocFamInst = liftM de_loc . mapMaybeM repTyClD
312 -- represent instance declarations
314 repInstD' :: LInstDecl Name -> DsM (SrcSpan, Core TH.DecQ)
315 repInstD' (L loc (InstDecl ty binds _ ats)) -- Ignore user pragmas for now
316 = do { i <- addTyVarBinds tvs $ \_ ->
317 -- We must bring the type variables into scope, so their
318 -- occurrences don't fail, even though the binders don't
319 -- appear in the resulting data structure
320 do { cxt1 <- repContext cxt
321 ; inst_ty1 <- repPredTy (HsClassP cls tys)
322 ; ss <- mkGenSyms (collectHsBindBinders binds)
323 ; binds1 <- addBinds ss (rep_binds binds)
324 ; ats1 <- repLAssocFamInst ats
325 ; decls1 <- coreList decQTyConName (ats1 ++ binds1)
326 ; decls2 <- wrapNongenSyms ss decls1
327 -- wrapNongenSyms: do not clone the class op names!
328 -- They must be called 'op' etc, not 'op34'
329 ; repInst cxt1 inst_ty1 (decls2)
333 (tvs, cxt, cls, tys) = splitHsInstDeclTy (unLoc ty)
335 repForD :: Located (ForeignDecl Name) -> DsM (SrcSpan, Core TH.DecQ)
336 repForD (L loc (ForeignImport name typ (CImport cc s ch cn cis)))
337 = do MkC name' <- lookupLOcc name
338 MkC typ' <- repLTy typ
339 MkC cc' <- repCCallConv cc
340 MkC s' <- repSafety s
341 cis' <- conv_cimportspec cis
342 MkC str <- coreStringLit $ static
343 ++ unpackFS ch ++ " "
344 ++ unpackFS cn ++ " "
346 dec <- rep2 forImpDName [cc', s', str, name', typ']
349 conv_cimportspec (CLabel cls) = notHandled "Foreign label" (doubleQuotes (ppr cls))
350 conv_cimportspec (CFunction DynamicTarget) = return "dynamic"
351 conv_cimportspec (CFunction (StaticTarget fs)) = return (unpackFS fs)
352 conv_cimportspec CWrapper = return "wrapper"
354 CFunction (StaticTarget _) -> "static "
356 repForD decl = notHandled "Foreign declaration" (ppr decl)
358 repCCallConv :: CCallConv -> DsM (Core TH.Callconv)
359 repCCallConv CCallConv = rep2 cCallName []
360 repCCallConv StdCallConv = rep2 stdCallName []
361 repCCallConv CmmCallConv = notHandled "repCCallConv" (ppr CmmCallConv)
363 repSafety :: Safety -> DsM (Core TH.Safety)
364 repSafety PlayRisky = rep2 unsafeName []
365 repSafety (PlaySafe False) = rep2 safeName []
366 repSafety (PlaySafe True) = rep2 threadsafeName []
369 ds_msg = ptext (sLit "Cannot desugar this Template Haskell declaration:")
371 -------------------------------------------------------
373 -------------------------------------------------------
375 repC :: LConDecl Name -> DsM (Core TH.ConQ)
376 repC (L _ (ConDecl con _ [] (L _ []) details ResTyH98 _))
377 = do { con1 <- lookupLOcc con -- See note [Binders and occurrences]
378 ; repConstr con1 details
380 repC (L loc (ConDecl con expl tvs (L cloc ctxt) details ResTyH98 doc))
381 = addTyVarBinds tvs $ \bndrs ->
382 do { c' <- repC (L loc (ConDecl con expl [] (L cloc []) details
384 ; ctxt' <- repContext ctxt
385 ; bndrs' <- coreList tyVarBndrTyConName bndrs
386 ; rep2 forallCName [unC bndrs', unC ctxt', unC c']
388 repC (L loc con_decl) -- GADTs
390 notHandled "GADT declaration" (ppr con_decl)
392 repBangTy :: LBangType Name -> DsM (Core (TH.StrictTypeQ))
396 rep2 strictTypeName [s, t]
398 (str, ty') = case ty of
399 L _ (HsBangTy _ ty) -> (isStrictName, ty)
400 _ -> (notStrictName, ty)
402 -------------------------------------------------------
404 -------------------------------------------------------
406 repDerivs :: Maybe [LHsType Name] -> DsM (Core [TH.Name])
407 repDerivs Nothing = coreList nameTyConName []
408 repDerivs (Just ctxt)
409 = do { strs <- mapM rep_deriv ctxt ;
410 coreList nameTyConName strs }
412 rep_deriv :: LHsType Name -> DsM (Core TH.Name)
413 -- Deriving clauses must have the simple H98 form
414 rep_deriv (L _ (HsPredTy (HsClassP cls []))) = lookupOcc cls
415 rep_deriv other = notHandled "Non-H98 deriving clause" (ppr other)
418 -------------------------------------------------------
419 -- Signatures in a class decl, or a group of bindings
420 -------------------------------------------------------
422 rep_sigs :: [LSig Name] -> DsM [Core TH.DecQ]
423 rep_sigs sigs = do locs_cores <- rep_sigs' sigs
424 return $ de_loc $ sort_by_loc locs_cores
426 rep_sigs' :: [LSig Name] -> DsM [(SrcSpan, Core TH.DecQ)]
427 -- We silently ignore ones we don't recognise
428 rep_sigs' sigs = do { sigs1 <- mapM rep_sig sigs ;
429 return (concat sigs1) }
431 rep_sig :: LSig Name -> DsM [(SrcSpan, Core TH.DecQ)]
433 -- Empty => Too hard, signature ignored
434 rep_sig (L loc (TypeSig nm ty)) = rep_proto nm ty loc
435 rep_sig (L loc (InlineSig nm ispec)) = rep_inline nm ispec loc
436 rep_sig (L loc (SpecSig nm ty ispec)) = rep_specialise nm ty ispec loc
437 rep_sig _ = return []
439 rep_proto :: Located Name -> LHsType Name -> SrcSpan
440 -> DsM [(SrcSpan, Core TH.DecQ)]
442 = do { nm1 <- lookupLOcc nm
444 ; sig <- repProto nm1 ty1
445 ; return [(loc, sig)]
448 rep_inline :: Located Name -> InlineSpec -> SrcSpan
449 -> DsM [(SrcSpan, Core TH.DecQ)]
450 rep_inline nm ispec loc
451 = do { nm1 <- lookupLOcc nm
452 ; (_, ispec1) <- rep_InlineSpec ispec
453 ; pragma <- repPragInl nm1 ispec1
454 ; return [(loc, pragma)]
457 rep_specialise :: Located Name -> LHsType Name -> InlineSpec -> SrcSpan
458 -> DsM [(SrcSpan, Core TH.DecQ)]
459 rep_specialise nm ty ispec loc
460 = do { nm1 <- lookupLOcc nm
462 ; (hasSpec, ispec1) <- rep_InlineSpec ispec
463 ; pragma <- if hasSpec
464 then repPragSpecInl nm1 ty1 ispec1
465 else repPragSpec nm1 ty1
466 ; return [(loc, pragma)]
469 -- extract all the information needed to build a TH.InlineSpec
471 rep_InlineSpec :: InlineSpec -> DsM (Bool, Core TH.InlineSpecQ)
472 rep_InlineSpec (Inline (InlinePragma activation match) inline)
473 | Nothing <- activation1
474 = liftM ((,) False) $ repInlineSpecNoPhase inline1 match1
475 | Just (flag, phase) <- activation1
476 = liftM ((,) True) $ repInlineSpecPhase inline1 match1 flag phase
477 | otherwise = {- unreachable, but shuts up -W -} panic "rep_InlineSpec"
479 match1 = coreBool (rep_RuleMatchInfo match)
480 activation1 = rep_Activation activation
481 inline1 = coreBool inline
483 rep_RuleMatchInfo FunLike = False
484 rep_RuleMatchInfo ConLike = True
486 rep_Activation NeverActive = Nothing
487 rep_Activation AlwaysActive = Nothing
488 rep_Activation (ActiveBefore phase) = Just (coreBool False,
489 MkC $ mkIntExprInt phase)
490 rep_Activation (ActiveAfter phase) = Just (coreBool True,
491 MkC $ mkIntExprInt phase)
494 -------------------------------------------------------
496 -------------------------------------------------------
498 -- We process type variable bindings in two ways, either by generating fresh
499 -- names or looking up existing names. The difference is crucial for type
500 -- families, depending on whether they are associated or not.
502 type ProcessTyVarBinds a =
503 [LHsTyVarBndr Name] -- the binders to be added
504 -> ([Core TH.TyVarBndr] -> DsM (Core (TH.Q a))) -- action in the ext env
505 -> DsM (Core (TH.Q a))
507 -- gensym a list of type variables and enter them into the meta environment;
508 -- the computations passed as the second argument is executed in that extended
509 -- meta environment and gets the *new* names on Core-level as an argument
511 addTyVarBinds :: ProcessTyVarBinds a
512 addTyVarBinds tvs m =
514 let names = hsLTyVarNames tvs
515 mkWithKinds = map repTyVarBndrWithKind tvs
516 freshNames <- mkGenSyms names
517 term <- addBinds freshNames $ do
518 bndrs <- mapM lookupBinder names
519 kindedBndrs <- zipWithM ($) mkWithKinds bndrs
521 wrapGenSyns freshNames term
523 -- Look up a list of type variables; the computations passed as the second
524 -- argument gets the *new* names on Core-level as an argument
526 lookupTyVarBinds :: ProcessTyVarBinds a
527 lookupTyVarBinds tvs m =
529 let names = hsLTyVarNames tvs
530 mkWithKinds = map repTyVarBndrWithKind tvs
531 bndrs <- mapM lookupBinder names
532 kindedBndrs <- zipWithM ($) mkWithKinds bndrs
535 -- Produce kinded binder constructors from the Haskell tyvar binders
537 repTyVarBndrWithKind :: LHsTyVarBndr Name
538 -> Core TH.Name -> DsM (Core TH.TyVarBndr)
539 repTyVarBndrWithKind (L _ (UserTyVar _)) = repPlainTV
540 repTyVarBndrWithKind (L _ (KindedTyVar _ ki)) =
541 \nm -> repKind ki >>= repKindedTV nm
543 -- represent a type context
545 repLContext :: LHsContext Name -> DsM (Core TH.CxtQ)
546 repLContext (L _ ctxt) = repContext ctxt
548 repContext :: HsContext Name -> DsM (Core TH.CxtQ)
550 preds <- mapM repLPred ctxt
551 predList <- coreList predQTyConName preds
554 -- represent a type predicate
556 repLPred :: LHsPred Name -> DsM (Core TH.PredQ)
557 repLPred (L _ p) = repPred p
559 repPred :: HsPred Name -> DsM (Core TH.PredQ)
560 repPred (HsClassP cls tys)
562 cls1 <- lookupOcc cls
564 tys2 <- coreList typeQTyConName tys1
566 repPred (HsEqualP tyleft tyright)
568 tyleft1 <- repLTy tyleft
569 tyright1 <- repLTy tyright
570 repEqualP tyleft1 tyright1
571 repPred p@(HsIParam _ _) = notHandled "Implicit parameter constraint" (ppr p)
573 repPredTy :: HsPred Name -> DsM (Core TH.TypeQ)
574 repPredTy (HsClassP cls tys)
576 tcon <- repTy (HsTyVar cls)
579 repPredTy _ = panic "DsMeta.repPredTy: unexpected equality: internal error"
581 -- yield the representation of a list of types
583 repLTys :: [LHsType Name] -> DsM [Core TH.TypeQ]
584 repLTys tys = mapM repLTy tys
588 repLTy :: LHsType Name -> DsM (Core TH.TypeQ)
589 repLTy (L _ ty) = repTy ty
591 repTy :: HsType Name -> DsM (Core TH.TypeQ)
592 repTy (HsForAllTy _ tvs ctxt ty) =
593 addTyVarBinds tvs $ \bndrs -> do
594 ctxt1 <- repLContext ctxt
596 bndrs1 <- coreList tyVarBndrTyConName bndrs
597 repTForall bndrs1 ctxt1 ty1
600 | isTvOcc (nameOccName n) = do
606 repTy (HsAppTy f a) = do
610 repTy (HsFunTy f a) = do
613 tcon <- repArrowTyCon
614 repTapps tcon [f1, a1]
615 repTy (HsListTy t) = do
619 repTy (HsPArrTy t) = do
621 tcon <- repTy (HsTyVar (tyConName parrTyCon))
623 repTy (HsTupleTy _ tys) = do
625 tcon <- repTupleTyCon (length tys)
627 repTy (HsOpTy ty1 n ty2) = repLTy ((nlHsTyVar (unLoc n) `nlHsAppTy` ty1)
629 repTy (HsParTy t) = repLTy t
630 repTy (HsPredTy pred) = repPredTy pred
631 repTy (HsKindSig t k) = do
635 repTy ty@(HsNumTy _) = notHandled "Number types (for generics)" (ppr ty)
636 repTy ty = notHandled "Exotic form of type" (ppr ty)
640 repKind :: Kind -> DsM (Core TH.Kind)
642 = do { let (kis, ki') = splitKindFunTys ki
643 ; kis_rep <- mapM repKind kis
644 ; ki'_rep <- repNonArrowKind ki'
645 ; foldlM repArrowK ki'_rep kis_rep
648 repNonArrowKind k | isLiftedTypeKind k = repStarK
649 | otherwise = notHandled "Exotic form of kind"
652 -----------------------------------------------------------------------------
654 -----------------------------------------------------------------------------
656 repLEs :: [LHsExpr Name] -> DsM (Core [TH.ExpQ])
657 repLEs es = do { es' <- mapM repLE es ;
658 coreList expQTyConName es' }
660 -- FIXME: some of these panics should be converted into proper error messages
661 -- unless we can make sure that constructs, which are plainly not
662 -- supported in TH already lead to error messages at an earlier stage
663 repLE :: LHsExpr Name -> DsM (Core TH.ExpQ)
664 repLE (L loc e) = putSrcSpanDs loc (repE e)
666 repE :: HsExpr Name -> DsM (Core TH.ExpQ)
668 do { mb_val <- dsLookupMetaEnv x
670 Nothing -> do { str <- globalVar x
671 ; repVarOrCon x str }
672 Just (Bound y) -> repVarOrCon x (coreVar y)
673 Just (Splice e) -> do { e' <- dsExpr e
674 ; return (MkC e') } }
675 repE e@(HsIPVar _) = notHandled "Implicit parameters" (ppr e)
677 -- Remember, we're desugaring renamer output here, so
678 -- HsOverlit can definitely occur
679 repE (HsOverLit l) = do { a <- repOverloadedLiteral l; repLit a }
680 repE (HsLit l) = do { a <- repLiteral l; repLit a }
681 repE (HsLam (MatchGroup [m] _)) = repLambda m
682 repE (HsApp x y) = do {a <- repLE x; b <- repLE y; repApp a b}
684 repE (OpApp e1 op _ e2) =
685 do { arg1 <- repLE e1;
688 repInfixApp arg1 the_op arg2 }
689 repE (NegApp x _) = do
691 negateVar <- lookupOcc negateName >>= repVar
693 repE (HsPar x) = repLE x
694 repE (SectionL x y) = do { a <- repLE x; b <- repLE y; repSectionL a b }
695 repE (SectionR x y) = do { a <- repLE x; b <- repLE y; repSectionR a b }
696 repE (HsCase e (MatchGroup ms _)) = do { arg <- repLE e
697 ; ms2 <- mapM repMatchTup ms
698 ; repCaseE arg (nonEmptyCoreList ms2) }
699 repE (HsIf x y z) = do
704 repE (HsLet bs e) = do { (ss,ds) <- repBinds bs
705 ; e2 <- addBinds ss (repLE e)
708 -- FIXME: I haven't got the types here right yet
709 repE (HsDo DoExpr sts body _)
710 = do { (ss,zs) <- repLSts sts;
711 body' <- addBinds ss $ repLE body;
712 ret <- repNoBindSt body';
713 e <- repDoE (nonEmptyCoreList (zs ++ [ret]));
715 repE (HsDo ListComp sts body _)
716 = do { (ss,zs) <- repLSts sts;
717 body' <- addBinds ss $ repLE body;
718 ret <- repNoBindSt body';
719 e <- repComp (nonEmptyCoreList (zs ++ [ret]));
721 repE e@(HsDo _ _ _ _) = notHandled "mdo and [: :]" (ppr e)
722 repE (ExplicitList _ es) = do { xs <- repLEs es; repListExp xs }
723 repE e@(ExplicitPArr _ _) = notHandled "Parallel arrays" (ppr e)
724 repE e@(ExplicitTuple es boxed)
725 | isBoxed boxed = do { xs <- repLEs es; repTup xs }
726 | otherwise = notHandled "Unboxed tuples" (ppr e)
727 repE (RecordCon c _ flds)
728 = do { x <- lookupLOcc c;
729 fs <- repFields flds;
731 repE (RecordUpd e flds _ _ _)
733 fs <- repFields flds;
736 repE (ExprWithTySig e ty) = do { e1 <- repLE e; t1 <- repLTy ty; repSigExp e1 t1 }
737 repE (ArithSeq _ aseq) =
739 From e -> do { ds1 <- repLE e; repFrom ds1 }
748 FromThenTo e1 e2 e3 -> do
752 repFromThenTo ds1 ds2 ds3
753 repE (HsSpliceE (HsSplice n _))
754 = do { mb_val <- dsLookupMetaEnv n
756 Just (Splice e) -> do { e' <- dsExpr e
758 _ -> pprPanic "HsSplice" (ppr n) }
759 -- Should not happen; statically checked
761 repE e@(PArrSeq {}) = notHandled "Parallel arrays" (ppr e)
762 repE e@(HsCoreAnn {}) = notHandled "Core annotations" (ppr e)
763 repE e@(HsSCC {}) = notHandled "Cost centres" (ppr e)
764 repE e@(HsTickPragma {}) = notHandled "Tick Pragma" (ppr e)
765 repE e@(HsBracketOut {}) = notHandled "TH brackets" (ppr e)
766 repE e = notHandled "Expression form" (ppr e)
768 -----------------------------------------------------------------------------
769 -- Building representations of auxillary structures like Match, Clause, Stmt,
771 repMatchTup :: LMatch Name -> DsM (Core TH.MatchQ)
772 repMatchTup (L _ (Match [p] _ (GRHSs guards wheres))) =
773 do { ss1 <- mkGenSyms (collectPatBinders p)
774 ; addBinds ss1 $ do {
776 ; (ss2,ds) <- repBinds wheres
777 ; addBinds ss2 $ do {
778 ; gs <- repGuards guards
779 ; match <- repMatch p1 gs ds
780 ; wrapGenSyns (ss1++ss2) match }}}
781 repMatchTup _ = panic "repMatchTup: case alt with more than one arg"
783 repClauseTup :: LMatch Name -> DsM (Core TH.ClauseQ)
784 repClauseTup (L _ (Match ps _ (GRHSs guards wheres))) =
785 do { ss1 <- mkGenSyms (collectPatsBinders ps)
786 ; addBinds ss1 $ do {
788 ; (ss2,ds) <- repBinds wheres
789 ; addBinds ss2 $ do {
790 gs <- repGuards guards
791 ; clause <- repClause ps1 gs ds
792 ; wrapGenSyns (ss1++ss2) clause }}}
794 repGuards :: [LGRHS Name] -> DsM (Core TH.BodyQ)
795 repGuards [L _ (GRHS [] e)]
796 = do {a <- repLE e; repNormal a }
798 = do { zs <- mapM process other;
799 let {(xs, ys) = unzip zs};
800 gd <- repGuarded (nonEmptyCoreList ys);
801 wrapGenSyns (concat xs) gd }
803 process :: LGRHS Name -> DsM ([GenSymBind], (Core (TH.Q (TH.Guard, TH.Exp))))
804 process (L _ (GRHS [L _ (ExprStmt e1 _ _)] e2))
805 = do { x <- repLNormalGE e1 e2;
807 process (L _ (GRHS ss rhs))
808 = do (gs, ss') <- repLSts ss
809 rhs' <- addBinds gs $ repLE rhs
810 g <- repPatGE (nonEmptyCoreList ss') rhs'
813 repFields :: HsRecordBinds Name -> DsM (Core [TH.Q TH.FieldExp])
814 repFields (HsRecFields { rec_flds = flds })
815 = do { fnames <- mapM lookupLOcc (map hsRecFieldId flds)
816 ; es <- mapM repLE (map hsRecFieldArg flds)
817 ; fs <- zipWithM repFieldExp fnames es
818 ; coreList fieldExpQTyConName fs }
821 -----------------------------------------------------------------------------
822 -- Representing Stmt's is tricky, especially if bound variables
823 -- shadow each other. Consider: [| do { x <- f 1; x <- f x; g x } |]
824 -- First gensym new names for every variable in any of the patterns.
825 -- both static (x'1 and x'2), and dynamic ((gensym "x") and (gensym "y"))
826 -- if variables didn't shaddow, the static gensym wouldn't be necessary
827 -- and we could reuse the original names (x and x).
829 -- do { x'1 <- gensym "x"
830 -- ; x'2 <- gensym "x"
831 -- ; doE [ BindSt (pvar x'1) [| f 1 |]
832 -- , BindSt (pvar x'2) [| f x |]
833 -- , NoBindSt [| g x |]
837 -- The strategy is to translate a whole list of do-bindings by building a
838 -- bigger environment, and a bigger set of meta bindings
839 -- (like: x'1 <- gensym "x" ) and then combining these with the translations
840 -- of the expressions within the Do
842 -----------------------------------------------------------------------------
843 -- The helper function repSts computes the translation of each sub expression
844 -- and a bunch of prefix bindings denoting the dynamic renaming.
846 repLSts :: [LStmt Name] -> DsM ([GenSymBind], [Core TH.StmtQ])
847 repLSts stmts = repSts (map unLoc stmts)
849 repSts :: [Stmt Name] -> DsM ([GenSymBind], [Core TH.StmtQ])
850 repSts (BindStmt p e _ _ : ss) =
852 ; ss1 <- mkGenSyms (collectPatBinders p)
853 ; addBinds ss1 $ do {
855 ; (ss2,zs) <- repSts ss
856 ; z <- repBindSt p1 e2
857 ; return (ss1++ss2, z : zs) }}
858 repSts (LetStmt bs : ss) =
859 do { (ss1,ds) <- repBinds bs
861 ; (ss2,zs) <- addBinds ss1 (repSts ss)
862 ; return (ss1++ss2, z : zs) }
863 repSts (ExprStmt e _ _ : ss) =
865 ; z <- repNoBindSt e2
866 ; (ss2,zs) <- repSts ss
867 ; return (ss2, z : zs) }
868 repSts [] = return ([],[])
869 repSts other = notHandled "Exotic statement" (ppr other)
872 -----------------------------------------------------------
874 -----------------------------------------------------------
876 repBinds :: HsLocalBinds Name -> DsM ([GenSymBind], Core [TH.DecQ])
877 repBinds EmptyLocalBinds
878 = do { core_list <- coreList decQTyConName []
879 ; return ([], core_list) }
881 repBinds b@(HsIPBinds _) = notHandled "Implicit parameters" (ppr b)
883 repBinds (HsValBinds decs)
884 = do { let { bndrs = map unLoc (collectHsValBinders decs) }
885 -- No need to worrry about detailed scopes within
886 -- the binding group, because we are talking Names
887 -- here, so we can safely treat it as a mutually
889 ; ss <- mkGenSyms bndrs
890 ; prs <- addBinds ss (rep_val_binds decs)
891 ; core_list <- coreList decQTyConName
892 (de_loc (sort_by_loc prs))
893 ; return (ss, core_list) }
895 rep_val_binds :: HsValBinds Name -> DsM [(SrcSpan, Core TH.DecQ)]
896 -- Assumes: all the binders of the binding are alrady in the meta-env
897 rep_val_binds (ValBindsOut binds sigs)
898 = do { core1 <- rep_binds' (unionManyBags (map snd binds))
899 ; core2 <- rep_sigs' sigs
900 ; return (core1 ++ core2) }
901 rep_val_binds (ValBindsIn _ _)
902 = panic "rep_val_binds: ValBindsIn"
904 rep_binds :: LHsBinds Name -> DsM [Core TH.DecQ]
905 rep_binds binds = do { binds_w_locs <- rep_binds' binds
906 ; return (de_loc (sort_by_loc binds_w_locs)) }
908 rep_binds' :: LHsBinds Name -> DsM [(SrcSpan, Core TH.DecQ)]
909 rep_binds' binds = mapM rep_bind (bagToList binds)
911 rep_bind :: LHsBind Name -> DsM (SrcSpan, Core TH.DecQ)
912 -- Assumes: all the binders of the binding are alrady in the meta-env
914 -- Note GHC treats declarations of a variable (not a pattern)
915 -- e.g. x = g 5 as a Fun MonoBinds. This is indicated by a single match
916 -- with an empty list of patterns
917 rep_bind (L loc (FunBind { fun_id = fn,
918 fun_matches = MatchGroup [L _ (Match [] _ (GRHSs guards wheres))] _ }))
919 = do { (ss,wherecore) <- repBinds wheres
920 ; guardcore <- addBinds ss (repGuards guards)
921 ; fn' <- lookupLBinder fn
923 ; ans <- repVal p guardcore wherecore
924 ; ans' <- wrapGenSyns ss ans
925 ; return (loc, ans') }
927 rep_bind (L loc (FunBind { fun_id = fn, fun_matches = MatchGroup ms _ }))
928 = do { ms1 <- mapM repClauseTup ms
929 ; fn' <- lookupLBinder fn
930 ; ans <- repFun fn' (nonEmptyCoreList ms1)
931 ; return (loc, ans) }
933 rep_bind (L loc (PatBind { pat_lhs = pat, pat_rhs = GRHSs guards wheres }))
934 = do { patcore <- repLP pat
935 ; (ss,wherecore) <- repBinds wheres
936 ; guardcore <- addBinds ss (repGuards guards)
937 ; ans <- repVal patcore guardcore wherecore
938 ; ans' <- wrapGenSyns ss ans
939 ; return (loc, ans') }
941 rep_bind (L _ (VarBind { var_id = v, var_rhs = e}))
942 = do { v' <- lookupBinder v
945 ; patcore <- repPvar v'
946 ; empty_decls <- coreList decQTyConName []
947 ; ans <- repVal patcore x empty_decls
948 ; return (srcLocSpan (getSrcLoc v), ans) }
950 rep_bind (L _ (AbsBinds {})) = panic "rep_bind: AbsBinds"
952 -----------------------------------------------------------------------------
953 -- Since everything in a Bind is mutually recursive we need rename all
954 -- all the variables simultaneously. For example:
955 -- [| AndMonoBinds (f x = x + g 2) (g x = f 1 + 2) |] would translate to
956 -- do { f'1 <- gensym "f"
957 -- ; g'2 <- gensym "g"
958 -- ; [ do { x'3 <- gensym "x"; fun f'1 [pvar x'3] [| x + g2 |]},
959 -- do { x'4 <- gensym "x"; fun g'2 [pvar x'4] [| f 1 + 2 |]}
961 -- This requires collecting the bindings (f'1 <- gensym "f"), and the
962 -- environment ( f |-> f'1 ) from each binding, and then unioning them
963 -- together. As we do this we collect GenSymBinds's which represent the renamed
964 -- variables bound by the Bindings. In order not to lose track of these
965 -- representations we build a shadow datatype MB with the same structure as
966 -- MonoBinds, but which has slots for the representations
969 -----------------------------------------------------------------------------
970 -- GHC allows a more general form of lambda abstraction than specified
971 -- by Haskell 98. In particular it allows guarded lambda's like :
972 -- (\ x | even x -> 0 | odd x -> 1) at the moment we can't represent this in
973 -- Haskell Template's Meta.Exp type so we punt if it isn't a simple thing like
974 -- (\ p1 .. pn -> exp) by causing an error.
976 repLambda :: LMatch Name -> DsM (Core TH.ExpQ)
977 repLambda (L _ (Match ps _ (GRHSs [L _ (GRHS [] e)] EmptyLocalBinds)))
978 = do { let bndrs = collectPatsBinders ps ;
979 ; ss <- mkGenSyms bndrs
980 ; lam <- addBinds ss (
981 do { xs <- repLPs ps; body <- repLE e; repLam xs body })
982 ; wrapGenSyns ss lam }
984 repLambda (L _ m) = notHandled "Guarded labmdas" (pprMatch (LambdaExpr :: HsMatchContext Name) m)
987 -----------------------------------------------------------------------------
989 -- repP deals with patterns. It assumes that we have already
990 -- walked over the pattern(s) once to collect the binders, and
991 -- have extended the environment. So every pattern-bound
992 -- variable should already appear in the environment.
994 -- Process a list of patterns
995 repLPs :: [LPat Name] -> DsM (Core [TH.PatQ])
996 repLPs ps = do { ps' <- mapM repLP ps ;
997 coreList patQTyConName ps' }
999 repLP :: LPat Name -> DsM (Core TH.PatQ)
1000 repLP (L _ p) = repP p
1002 repP :: Pat Name -> DsM (Core TH.PatQ)
1003 repP (WildPat _) = repPwild
1004 repP (LitPat l) = do { l2 <- repLiteral l; repPlit l2 }
1005 repP (VarPat x) = do { x' <- lookupBinder x; repPvar x' }
1006 repP (LazyPat p) = do { p1 <- repLP p; repPtilde p1 }
1007 repP (BangPat p) = do { p1 <- repLP p; repPbang p1 }
1008 repP (AsPat x p) = do { x' <- lookupLBinder x; p1 <- repLP p; repPaspat x' p1 }
1009 repP (ParPat p) = repLP p
1010 repP (ListPat ps _) = do { qs <- repLPs ps; repPlist qs }
1011 repP (TuplePat ps _ _) = do { qs <- repLPs ps; repPtup qs }
1012 repP (ConPatIn dc details)
1013 = do { con_str <- lookupLOcc dc
1015 PrefixCon ps -> do { qs <- repLPs ps; repPcon con_str qs }
1016 RecCon rec -> do { let flds = rec_flds rec
1017 ; vs <- sequence $ map lookupLOcc (map hsRecFieldId flds)
1018 ; ps <- sequence $ map repLP (map hsRecFieldArg flds)
1019 ; fps <- zipWithM (\x y -> rep2 fieldPatName [unC x,unC y]) vs ps
1020 ; fps' <- coreList fieldPatQTyConName fps
1021 ; repPrec con_str fps' }
1022 InfixCon p1 p2 -> do { p1' <- repLP p1;
1024 repPinfix p1' con_str p2' }
1026 repP (NPat l Nothing _) = do { a <- repOverloadedLiteral l; repPlit a }
1027 repP p@(NPat _ (Just _) _) = notHandled "Negative overloaded patterns" (ppr p)
1028 repP p@(SigPatIn {}) = notHandled "Type signatures in patterns" (ppr p)
1029 -- The problem is to do with scoped type variables.
1030 -- To implement them, we have to implement the scoping rules
1031 -- here in DsMeta, and I don't want to do that today!
1032 -- do { p' <- repLP p; t' <- repLTy t; repPsig p' t' }
1033 -- repPsig :: Core TH.PatQ -> Core TH.TypeQ -> DsM (Core TH.PatQ)
1034 -- repPsig (MkC p) (MkC t) = rep2 sigPName [p, t]
1036 repP other = notHandled "Exotic pattern" (ppr other)
1038 ----------------------------------------------------------
1039 -- Declaration ordering helpers
1041 sort_by_loc :: [(SrcSpan, a)] -> [(SrcSpan, a)]
1042 sort_by_loc xs = sortBy comp xs
1043 where comp x y = compare (fst x) (fst y)
1045 de_loc :: [(a, b)] -> [b]
1048 ----------------------------------------------------------
1049 -- The meta-environment
1051 -- A name/identifier association for fresh names of locally bound entities
1052 type GenSymBind = (Name, Id) -- Gensym the string and bind it to the Id
1053 -- I.e. (x, x_id) means
1054 -- let x_id = gensym "x" in ...
1056 -- Generate a fresh name for a locally bound entity
1058 mkGenSyms :: [Name] -> DsM [GenSymBind]
1059 -- We can use the existing name. For example:
1060 -- [| \x_77 -> x_77 + x_77 |]
1062 -- do { x_77 <- genSym "x"; .... }
1063 -- We use the same x_77 in the desugared program, but with the type Bndr
1066 -- We do make it an Internal name, though (hence localiseName)
1068 -- Nevertheless, it's monadic because we have to generate nameTy
1069 mkGenSyms ns = do { var_ty <- lookupType nameTyConName
1070 ; return [(nm, mkLocalId (localiseName nm) var_ty) | nm <- ns] }
1073 addBinds :: [GenSymBind] -> DsM a -> DsM a
1074 -- Add a list of fresh names for locally bound entities to the
1075 -- meta environment (which is part of the state carried around
1076 -- by the desugarer monad)
1077 addBinds bs m = dsExtendMetaEnv (mkNameEnv [(n,Bound id) | (n,id) <- bs]) m
1079 -- Look up a locally bound name
1081 lookupLBinder :: Located Name -> DsM (Core TH.Name)
1082 lookupLBinder (L _ n) = lookupBinder n
1084 lookupBinder :: Name -> DsM (Core TH.Name)
1086 = do { mb_val <- dsLookupMetaEnv n;
1088 Just (Bound x) -> return (coreVar x)
1089 _ -> failWithDs msg }
1091 msg = ptext (sLit "DsMeta: failed binder lookup when desugaring a TH bracket:") <+> ppr n
1093 -- Look up a name that is either locally bound or a global name
1095 -- * If it is a global name, generate the "original name" representation (ie,
1096 -- the <module>:<name> form) for the associated entity
1098 lookupLOcc :: Located Name -> DsM (Core TH.Name)
1099 -- Lookup an occurrence; it can't be a splice.
1100 -- Use the in-scope bindings if they exist
1101 lookupLOcc (L _ n) = lookupOcc n
1103 lookupOcc :: Name -> DsM (Core TH.Name)
1105 = do { mb_val <- dsLookupMetaEnv n ;
1107 Nothing -> globalVar n
1108 Just (Bound x) -> return (coreVar x)
1109 Just (Splice _) -> pprPanic "repE:lookupOcc" (ppr n)
1112 lookupTvOcc :: Name -> DsM (Core TH.Name)
1113 -- Type variables can't be staged and are not lexically scoped in TH
1115 = do { mb_val <- dsLookupMetaEnv n ;
1117 Just (Bound x) -> return (coreVar x)
1121 msg = vcat [ ptext (sLit "Illegal lexically-scoped type variable") <+> quotes (ppr n)
1122 , ptext (sLit "Lexically scoped type variables are not supported by Template Haskell") ]
1124 globalVar :: Name -> DsM (Core TH.Name)
1125 -- Not bound by the meta-env
1126 -- Could be top-level; or could be local
1127 -- f x = $(g [| x |])
1128 -- Here the x will be local
1130 | isExternalName name
1131 = do { MkC mod <- coreStringLit name_mod
1132 ; MkC pkg <- coreStringLit name_pkg
1133 ; MkC occ <- occNameLit name
1134 ; rep2 mk_varg [pkg,mod,occ] }
1136 = do { MkC occ <- occNameLit name
1137 ; MkC uni <- coreIntLit (getKey (getUnique name))
1138 ; rep2 mkNameLName [occ,uni] }
1140 mod = ASSERT( isExternalName name) nameModule name
1141 name_mod = moduleNameString (moduleName mod)
1142 name_pkg = packageIdString (modulePackageId mod)
1143 name_occ = nameOccName name
1144 mk_varg | OccName.isDataOcc name_occ = mkNameG_dName
1145 | OccName.isVarOcc name_occ = mkNameG_vName
1146 | OccName.isTcOcc name_occ = mkNameG_tcName
1147 | otherwise = pprPanic "DsMeta.globalVar" (ppr name)
1149 lookupType :: Name -- Name of type constructor (e.g. TH.ExpQ)
1150 -> DsM Type -- The type
1151 lookupType tc_name = do { tc <- dsLookupTyCon tc_name ;
1152 return (mkTyConApp tc []) }
1154 wrapGenSyns :: [GenSymBind]
1155 -> Core (TH.Q a) -> DsM (Core (TH.Q a))
1156 -- wrapGenSyns [(nm1,id1), (nm2,id2)] y
1157 -- --> bindQ (gensym nm1) (\ id1 ->
1158 -- bindQ (gensym nm2 (\ id2 ->
1161 wrapGenSyns binds body@(MkC b)
1162 = do { var_ty <- lookupType nameTyConName
1165 [elt_ty] = tcTyConAppArgs (exprType b)
1166 -- b :: Q a, so we can get the type 'a' by looking at the
1167 -- argument type. NB: this relies on Q being a data/newtype,
1168 -- not a type synonym
1170 go _ [] = return body
1171 go var_ty ((name,id) : binds)
1172 = do { MkC body' <- go var_ty binds
1173 ; lit_str <- occNameLit name
1174 ; gensym_app <- repGensym lit_str
1175 ; repBindQ var_ty elt_ty
1176 gensym_app (MkC (Lam id body')) }
1178 -- Just like wrapGenSym, but don't actually do the gensym
1179 -- Instead use the existing name:
1180 -- let x = "x" in ...
1181 -- Only used for [Decl], and for the class ops in class
1182 -- and instance decls
1183 wrapNongenSyms :: [GenSymBind] -> Core a -> DsM (Core a)
1184 wrapNongenSyms binds (MkC body)
1185 = do { binds' <- mapM do_one binds ;
1186 return (MkC (mkLets binds' body)) }
1189 = do { MkC lit_str <- occNameLit name
1190 ; MkC var <- rep2 mkNameName [lit_str]
1191 ; return (NonRec id var) }
1193 occNameLit :: Name -> DsM (Core String)
1194 occNameLit n = coreStringLit (occNameString (nameOccName n))
1197 -- %*********************************************************************
1199 -- Constructing code
1201 -- %*********************************************************************
1203 -----------------------------------------------------------------------------
1204 -- PHANTOM TYPES for consistency. In order to make sure we do this correct
1205 -- we invent a new datatype which uses phantom types.
1207 newtype Core a = MkC CoreExpr
1208 unC :: Core a -> CoreExpr
1211 rep2 :: Name -> [ CoreExpr ] -> DsM (Core a)
1212 rep2 n xs = do { id <- dsLookupGlobalId n
1213 ; return (MkC (foldl App (Var id) xs)) }
1215 -- Then we make "repConstructors" which use the phantom types for each of the
1216 -- smart constructors of the Meta.Meta datatypes.
1219 -- %*********************************************************************
1221 -- The 'smart constructors'
1223 -- %*********************************************************************
1225 --------------- Patterns -----------------
1226 repPlit :: Core TH.Lit -> DsM (Core TH.PatQ)
1227 repPlit (MkC l) = rep2 litPName [l]
1229 repPvar :: Core TH.Name -> DsM (Core TH.PatQ)
1230 repPvar (MkC s) = rep2 varPName [s]
1232 repPtup :: Core [TH.PatQ] -> DsM (Core TH.PatQ)
1233 repPtup (MkC ps) = rep2 tupPName [ps]
1235 repPcon :: Core TH.Name -> Core [TH.PatQ] -> DsM (Core TH.PatQ)
1236 repPcon (MkC s) (MkC ps) = rep2 conPName [s, ps]
1238 repPrec :: Core TH.Name -> Core [(TH.Name,TH.PatQ)] -> DsM (Core TH.PatQ)
1239 repPrec (MkC c) (MkC rps) = rep2 recPName [c,rps]
1241 repPinfix :: Core TH.PatQ -> Core TH.Name -> Core TH.PatQ -> DsM (Core TH.PatQ)
1242 repPinfix (MkC p1) (MkC n) (MkC p2) = rep2 infixPName [p1, n, p2]
1244 repPtilde :: Core TH.PatQ -> DsM (Core TH.PatQ)
1245 repPtilde (MkC p) = rep2 tildePName [p]
1247 repPbang :: Core TH.PatQ -> DsM (Core TH.PatQ)
1248 repPbang (MkC p) = rep2 bangPName [p]
1250 repPaspat :: Core TH.Name -> Core TH.PatQ -> DsM (Core TH.PatQ)
1251 repPaspat (MkC s) (MkC p) = rep2 asPName [s, p]
1253 repPwild :: DsM (Core TH.PatQ)
1254 repPwild = rep2 wildPName []
1256 repPlist :: Core [TH.PatQ] -> DsM (Core TH.PatQ)
1257 repPlist (MkC ps) = rep2 listPName [ps]
1259 --------------- Expressions -----------------
1260 repVarOrCon :: Name -> Core TH.Name -> DsM (Core TH.ExpQ)
1261 repVarOrCon vc str | isDataOcc (nameOccName vc) = repCon str
1262 | otherwise = repVar str
1264 repVar :: Core TH.Name -> DsM (Core TH.ExpQ)
1265 repVar (MkC s) = rep2 varEName [s]
1267 repCon :: Core TH.Name -> DsM (Core TH.ExpQ)
1268 repCon (MkC s) = rep2 conEName [s]
1270 repLit :: Core TH.Lit -> DsM (Core TH.ExpQ)
1271 repLit (MkC c) = rep2 litEName [c]
1273 repApp :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1274 repApp (MkC x) (MkC y) = rep2 appEName [x,y]
1276 repLam :: Core [TH.PatQ] -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1277 repLam (MkC ps) (MkC e) = rep2 lamEName [ps, e]
1279 repTup :: Core [TH.ExpQ] -> DsM (Core TH.ExpQ)
1280 repTup (MkC es) = rep2 tupEName [es]
1282 repCond :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1283 repCond (MkC x) (MkC y) (MkC z) = rep2 condEName [x,y,z]
1285 repLetE :: Core [TH.DecQ] -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1286 repLetE (MkC ds) (MkC e) = rep2 letEName [ds, e]
1288 repCaseE :: Core TH.ExpQ -> Core [TH.MatchQ] -> DsM( Core TH.ExpQ)
1289 repCaseE (MkC e) (MkC ms) = rep2 caseEName [e, ms]
1291 repDoE :: Core [TH.StmtQ] -> DsM (Core TH.ExpQ)
1292 repDoE (MkC ss) = rep2 doEName [ss]
1294 repComp :: Core [TH.StmtQ] -> DsM (Core TH.ExpQ)
1295 repComp (MkC ss) = rep2 compEName [ss]
1297 repListExp :: Core [TH.ExpQ] -> DsM (Core TH.ExpQ)
1298 repListExp (MkC es) = rep2 listEName [es]
1300 repSigExp :: Core TH.ExpQ -> Core TH.TypeQ -> DsM (Core TH.ExpQ)
1301 repSigExp (MkC e) (MkC t) = rep2 sigEName [e,t]
1303 repRecCon :: Core TH.Name -> Core [TH.Q TH.FieldExp]-> DsM (Core TH.ExpQ)
1304 repRecCon (MkC c) (MkC fs) = rep2 recConEName [c,fs]
1306 repRecUpd :: Core TH.ExpQ -> Core [TH.Q TH.FieldExp] -> DsM (Core TH.ExpQ)
1307 repRecUpd (MkC e) (MkC fs) = rep2 recUpdEName [e,fs]
1309 repFieldExp :: Core TH.Name -> Core TH.ExpQ -> DsM (Core (TH.Q TH.FieldExp))
1310 repFieldExp (MkC n) (MkC x) = rep2 fieldExpName [n,x]
1312 repInfixApp :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1313 repInfixApp (MkC x) (MkC y) (MkC z) = rep2 infixAppName [x,y,z]
1315 repSectionL :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1316 repSectionL (MkC x) (MkC y) = rep2 sectionLName [x,y]
1318 repSectionR :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1319 repSectionR (MkC x) (MkC y) = rep2 sectionRName [x,y]
1321 ------------ Right hand sides (guarded expressions) ----
1322 repGuarded :: Core [TH.Q (TH.Guard, TH.Exp)] -> DsM (Core TH.BodyQ)
1323 repGuarded (MkC pairs) = rep2 guardedBName [pairs]
1325 repNormal :: Core TH.ExpQ -> DsM (Core TH.BodyQ)
1326 repNormal (MkC e) = rep2 normalBName [e]
1328 ------------ Guards ----
1329 repLNormalGE :: LHsExpr Name -> LHsExpr Name -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1330 repLNormalGE g e = do g' <- repLE g
1334 repNormalGE :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1335 repNormalGE (MkC g) (MkC e) = rep2 normalGEName [g, e]
1337 repPatGE :: Core [TH.StmtQ] -> Core TH.ExpQ -> DsM (Core (TH.Q (TH.Guard, TH.Exp)))
1338 repPatGE (MkC ss) (MkC e) = rep2 patGEName [ss, e]
1340 ------------- Stmts -------------------
1341 repBindSt :: Core TH.PatQ -> Core TH.ExpQ -> DsM (Core TH.StmtQ)
1342 repBindSt (MkC p) (MkC e) = rep2 bindSName [p,e]
1344 repLetSt :: Core [TH.DecQ] -> DsM (Core TH.StmtQ)
1345 repLetSt (MkC ds) = rep2 letSName [ds]
1347 repNoBindSt :: Core TH.ExpQ -> DsM (Core TH.StmtQ)
1348 repNoBindSt (MkC e) = rep2 noBindSName [e]
1350 -------------- Range (Arithmetic sequences) -----------
1351 repFrom :: Core TH.ExpQ -> DsM (Core TH.ExpQ)
1352 repFrom (MkC x) = rep2 fromEName [x]
1354 repFromThen :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1355 repFromThen (MkC x) (MkC y) = rep2 fromThenEName [x,y]
1357 repFromTo :: Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1358 repFromTo (MkC x) (MkC y) = rep2 fromToEName [x,y]
1360 repFromThenTo :: Core TH.ExpQ -> Core TH.ExpQ -> Core TH.ExpQ -> DsM (Core TH.ExpQ)
1361 repFromThenTo (MkC x) (MkC y) (MkC z) = rep2 fromThenToEName [x,y,z]
1363 ------------ Match and Clause Tuples -----------
1364 repMatch :: Core TH.PatQ -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.MatchQ)
1365 repMatch (MkC p) (MkC bod) (MkC ds) = rep2 matchName [p, bod, ds]
1367 repClause :: Core [TH.PatQ] -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.ClauseQ)
1368 repClause (MkC ps) (MkC bod) (MkC ds) = rep2 clauseName [ps, bod, ds]
1370 -------------- Dec -----------------------------
1371 repVal :: Core TH.PatQ -> Core TH.BodyQ -> Core [TH.DecQ] -> DsM (Core TH.DecQ)
1372 repVal (MkC p) (MkC b) (MkC ds) = rep2 valDName [p, b, ds]
1374 repFun :: Core TH.Name -> Core [TH.ClauseQ] -> DsM (Core TH.DecQ)
1375 repFun (MkC nm) (MkC b) = rep2 funDName [nm, b]
1377 repData :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1378 -> Maybe (Core [TH.TypeQ])
1379 -> Core [TH.ConQ] -> Core [TH.Name] -> DsM (Core TH.DecQ)
1380 repData (MkC cxt) (MkC nm) (MkC tvs) Nothing (MkC cons) (MkC derivs)
1381 = rep2 dataDName [cxt, nm, tvs, cons, derivs]
1382 repData (MkC cxt) (MkC nm) (MkC _) (Just (MkC tys)) (MkC cons) (MkC derivs)
1383 = rep2 dataInstDName [cxt, nm, tys, cons, derivs]
1385 repNewtype :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1386 -> Maybe (Core [TH.TypeQ])
1387 -> Core TH.ConQ -> Core [TH.Name] -> DsM (Core TH.DecQ)
1388 repNewtype (MkC cxt) (MkC nm) (MkC tvs) Nothing (MkC con) (MkC derivs)
1389 = rep2 newtypeDName [cxt, nm, tvs, con, derivs]
1390 repNewtype (MkC cxt) (MkC nm) (MkC _) (Just (MkC tys)) (MkC con) (MkC derivs)
1391 = rep2 newtypeInstDName [cxt, nm, tys, con, derivs]
1393 repTySyn :: Core TH.Name -> Core [TH.TyVarBndr]
1394 -> Maybe (Core [TH.TypeQ])
1395 -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1396 repTySyn (MkC nm) (MkC tvs) Nothing (MkC rhs)
1397 = rep2 tySynDName [nm, tvs, rhs]
1398 repTySyn (MkC nm) (MkC _) (Just (MkC tys)) (MkC rhs)
1399 = rep2 tySynInstDName [nm, tys, rhs]
1401 repInst :: Core TH.CxtQ -> Core TH.TypeQ -> Core [TH.DecQ] -> DsM (Core TH.DecQ)
1402 repInst (MkC cxt) (MkC ty) (MkC ds) = rep2 instanceDName [cxt, ty, ds]
1404 repClass :: Core TH.CxtQ -> Core TH.Name -> Core [TH.TyVarBndr]
1405 -> Core [TH.FunDep] -> Core [TH.DecQ]
1406 -> DsM (Core TH.DecQ)
1407 repClass (MkC cxt) (MkC cls) (MkC tvs) (MkC fds) (MkC ds)
1408 = rep2 classDName [cxt, cls, tvs, fds, ds]
1410 repPragInl :: Core TH.Name -> Core TH.InlineSpecQ -> DsM (Core TH.DecQ)
1411 repPragInl (MkC nm) (MkC ispec) = rep2 pragInlDName [nm, ispec]
1413 repPragSpec :: Core TH.Name -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1414 repPragSpec (MkC nm) (MkC ty) = rep2 pragSpecDName [nm, ty]
1416 repPragSpecInl :: Core TH.Name -> Core TH.TypeQ -> Core TH.InlineSpecQ
1417 -> DsM (Core TH.DecQ)
1418 repPragSpecInl (MkC nm) (MkC ty) (MkC ispec)
1419 = rep2 pragSpecInlDName [nm, ty, ispec]
1421 repFamilyNoKind :: Core TH.FamFlavour -> Core TH.Name -> Core [TH.TyVarBndr]
1422 -> DsM (Core TH.DecQ)
1423 repFamilyNoKind (MkC flav) (MkC nm) (MkC tvs)
1424 = rep2 familyNoKindDName [flav, nm, tvs]
1426 repFamilyKind :: Core TH.FamFlavour -> Core TH.Name -> Core [TH.TyVarBndr]
1428 -> DsM (Core TH.DecQ)
1429 repFamilyKind (MkC flav) (MkC nm) (MkC tvs) (MkC ki)
1430 = rep2 familyKindDName [flav, nm, tvs, ki]
1432 repInlineSpecNoPhase :: Core Bool -> Core Bool -> DsM (Core TH.InlineSpecQ)
1433 repInlineSpecNoPhase (MkC inline) (MkC conlike)
1434 = rep2 inlineSpecNoPhaseName [inline, conlike]
1436 repInlineSpecPhase :: Core Bool -> Core Bool -> Core Bool -> Core Int
1437 -> DsM (Core TH.InlineSpecQ)
1438 repInlineSpecPhase (MkC inline) (MkC conlike) (MkC beforeFrom) (MkC phase)
1439 = rep2 inlineSpecPhaseName [inline, conlike, beforeFrom, phase]
1441 repFunDep :: Core [TH.Name] -> Core [TH.Name] -> DsM (Core TH.FunDep)
1442 repFunDep (MkC xs) (MkC ys) = rep2 funDepName [xs, ys]
1444 repProto :: Core TH.Name -> Core TH.TypeQ -> DsM (Core TH.DecQ)
1445 repProto (MkC s) (MkC ty) = rep2 sigDName [s, ty]
1447 repCtxt :: Core [TH.PredQ] -> DsM (Core TH.CxtQ)
1448 repCtxt (MkC tys) = rep2 cxtName [tys]
1450 repClassP :: Core TH.Name -> Core [TH.TypeQ] -> DsM (Core TH.PredQ)
1451 repClassP (MkC cla) (MkC tys) = rep2 classPName [cla, tys]
1453 repEqualP :: Core TH.TypeQ -> Core TH.TypeQ -> DsM (Core TH.PredQ)
1454 repEqualP (MkC ty1) (MkC ty2) = rep2 equalPName [ty1, ty2]
1456 repConstr :: Core TH.Name -> HsConDeclDetails Name
1457 -> DsM (Core TH.ConQ)
1458 repConstr con (PrefixCon ps)
1459 = do arg_tys <- mapM repBangTy ps
1460 arg_tys1 <- coreList strictTypeQTyConName arg_tys
1461 rep2 normalCName [unC con, unC arg_tys1]
1462 repConstr con (RecCon ips)
1463 = do arg_vs <- mapM lookupLOcc (map cd_fld_name ips)
1464 arg_tys <- mapM repBangTy (map cd_fld_type ips)
1465 arg_vtys <- zipWithM (\x y -> rep2 varStrictTypeName [unC x, unC y])
1467 arg_vtys' <- coreList varStrictTypeQTyConName arg_vtys
1468 rep2 recCName [unC con, unC arg_vtys']
1469 repConstr con (InfixCon st1 st2)
1470 = do arg1 <- repBangTy st1
1471 arg2 <- repBangTy st2
1472 rep2 infixCName [unC arg1, unC con, unC arg2]
1474 ------------ Types -------------------
1476 repTForall :: Core [TH.TyVarBndr] -> Core TH.CxtQ -> Core TH.TypeQ
1477 -> DsM (Core TH.TypeQ)
1478 repTForall (MkC tvars) (MkC ctxt) (MkC ty)
1479 = rep2 forallTName [tvars, ctxt, ty]
1481 repTvar :: Core TH.Name -> DsM (Core TH.TypeQ)
1482 repTvar (MkC s) = rep2 varTName [s]
1484 repTapp :: Core TH.TypeQ -> Core TH.TypeQ -> DsM (Core TH.TypeQ)
1485 repTapp (MkC t1) (MkC t2) = rep2 appTName [t1, t2]
1487 repTapps :: Core TH.TypeQ -> [Core TH.TypeQ] -> DsM (Core TH.TypeQ)
1488 repTapps f [] = return f
1489 repTapps f (t:ts) = do { f1 <- repTapp f t; repTapps f1 ts }
1491 repTSig :: Core TH.TypeQ -> Core TH.Kind -> DsM (Core TH.TypeQ)
1492 repTSig (MkC ty) (MkC ki) = rep2 sigTName [ty, ki]
1494 --------- Type constructors --------------
1496 repNamedTyCon :: Core TH.Name -> DsM (Core TH.TypeQ)
1497 repNamedTyCon (MkC s) = rep2 conTName [s]
1499 repTupleTyCon :: Int -> DsM (Core TH.TypeQ)
1500 -- Note: not Core Int; it's easier to be direct here
1501 repTupleTyCon i = rep2 tupleTName [mkIntExprInt i]
1503 repArrowTyCon :: DsM (Core TH.TypeQ)
1504 repArrowTyCon = rep2 arrowTName []
1506 repListTyCon :: DsM (Core TH.TypeQ)
1507 repListTyCon = rep2 listTName []
1509 ------------ Kinds -------------------
1511 repPlainTV :: Core TH.Name -> DsM (Core TH.TyVarBndr)
1512 repPlainTV (MkC nm) = rep2 plainTVName [nm]
1514 repKindedTV :: Core TH.Name -> Core TH.Kind -> DsM (Core TH.TyVarBndr)
1515 repKindedTV (MkC nm) (MkC ki) = rep2 kindedTVName [nm, ki]
1517 repStarK :: DsM (Core TH.Kind)
1518 repStarK = rep2 starKName []
1520 repArrowK :: Core TH.Kind -> Core TH.Kind -> DsM (Core TH.Kind)
1521 repArrowK (MkC ki1) (MkC ki2) = rep2 arrowKName [ki1, ki2]
1523 ----------------------------------------------------------
1526 repLiteral :: HsLit -> DsM (Core TH.Lit)
1528 = do lit' <- case lit of
1529 HsIntPrim i -> mk_integer i
1530 HsWordPrim w -> mk_integer w
1531 HsInt i -> mk_integer i
1532 HsFloatPrim r -> mk_rational r
1533 HsDoublePrim r -> mk_rational r
1535 lit_expr <- dsLit lit'
1537 Just lit_name -> rep2 lit_name [lit_expr]
1538 Nothing -> notHandled "Exotic literal" (ppr lit)
1540 mb_lit_name = case lit of
1541 HsInteger _ _ -> Just integerLName
1542 HsInt _ -> Just integerLName
1543 HsIntPrim _ -> Just intPrimLName
1544 HsWordPrim _ -> Just wordPrimLName
1545 HsFloatPrim _ -> Just floatPrimLName
1546 HsDoublePrim _ -> Just doublePrimLName
1547 HsChar _ -> Just charLName
1548 HsString _ -> Just stringLName
1549 HsRat _ _ -> Just rationalLName
1552 mk_integer :: Integer -> DsM HsLit
1553 mk_integer i = do integer_ty <- lookupType integerTyConName
1554 return $ HsInteger i integer_ty
1555 mk_rational :: Rational -> DsM HsLit
1556 mk_rational r = do rat_ty <- lookupType rationalTyConName
1557 return $ HsRat r rat_ty
1558 mk_string :: FastString -> DsM HsLit
1559 mk_string s = return $ HsString s
1561 repOverloadedLiteral :: HsOverLit Name -> DsM (Core TH.Lit)
1562 repOverloadedLiteral (OverLit { ol_val = val})
1563 = do { lit <- mk_lit val; repLiteral lit }
1564 -- The type Rational will be in the environment, becuase
1565 -- the smart constructor 'TH.Syntax.rationalL' uses it in its type,
1566 -- and rationalL is sucked in when any TH stuff is used
1568 mk_lit :: OverLitVal -> DsM HsLit
1569 mk_lit (HsIntegral i) = mk_integer i
1570 mk_lit (HsFractional f) = mk_rational f
1571 mk_lit (HsIsString s) = mk_string s
1573 --------------- Miscellaneous -------------------
1575 repGensym :: Core String -> DsM (Core (TH.Q TH.Name))
1576 repGensym (MkC lit_str) = rep2 newNameName [lit_str]
1578 repBindQ :: Type -> Type -- a and b
1579 -> Core (TH.Q a) -> Core (a -> TH.Q b) -> DsM (Core (TH.Q b))
1580 repBindQ ty_a ty_b (MkC x) (MkC y)
1581 = rep2 bindQName [Type ty_a, Type ty_b, x, y]
1583 repSequenceQ :: Type -> Core [TH.Q a] -> DsM (Core (TH.Q [a]))
1584 repSequenceQ ty_a (MkC list)
1585 = rep2 sequenceQName [Type ty_a, list]
1587 ------------ Lists and Tuples -------------------
1588 -- turn a list of patterns into a single pattern matching a list
1590 coreList :: Name -- Of the TyCon of the element type
1591 -> [Core a] -> DsM (Core [a])
1593 = do { elt_ty <- lookupType tc_name; return (coreList' elt_ty es) }
1595 coreList' :: Type -- The element type
1596 -> [Core a] -> Core [a]
1597 coreList' elt_ty es = MkC (mkListExpr elt_ty (map unC es ))
1599 nonEmptyCoreList :: [Core a] -> Core [a]
1600 -- The list must be non-empty so we can get the element type
1601 -- Otherwise use coreList
1602 nonEmptyCoreList [] = panic "coreList: empty argument"
1603 nonEmptyCoreList xs@(MkC x:_) = MkC (mkListExpr (exprType x) (map unC xs))
1605 coreStringLit :: String -> DsM (Core String)
1606 coreStringLit s = do { z <- mkStringExpr s; return(MkC z) }
1608 ------------ Bool, Literals & Variables -------------------
1610 coreBool :: Bool -> Core Bool
1611 coreBool False = MkC $ mkConApp falseDataCon []
1612 coreBool True = MkC $ mkConApp trueDataCon []
1614 coreIntLit :: Int -> DsM (Core Int)
1615 coreIntLit i = return (MkC (mkIntExprInt i))
1617 coreVar :: Id -> Core TH.Name -- The Id has type Name
1618 coreVar id = MkC (Var id)
1620 ----------------- Failure -----------------------
1621 notHandled :: String -> SDoc -> DsM a
1622 notHandled what doc = failWithDs msg
1624 msg = hang (text what <+> ptext (sLit "not (yet) handled by Template Haskell"))
1628 -- %************************************************************************
1630 -- The known-key names for Template Haskell
1632 -- %************************************************************************
1634 -- To add a name, do three things
1636 -- 1) Allocate a key
1638 -- 3) Add the name to knownKeyNames
1640 templateHaskellNames :: [Name]
1641 -- The names that are implicitly mentioned by ``bracket''
1642 -- Should stay in sync with the import list of DsMeta
1644 templateHaskellNames = [
1645 returnQName, bindQName, sequenceQName, newNameName, liftName,
1646 mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName, mkNameLName,
1649 charLName, stringLName, integerLName, intPrimLName, wordPrimLName,
1650 floatPrimLName, doublePrimLName, rationalLName,
1652 litPName, varPName, tupPName, conPName, tildePName, bangPName, infixPName,
1653 asPName, wildPName, recPName, listPName, sigPName,
1661 varEName, conEName, litEName, appEName, infixEName,
1662 infixAppName, sectionLName, sectionRName, lamEName, tupEName,
1663 condEName, letEName, caseEName, doEName, compEName,
1664 fromEName, fromThenEName, fromToEName, fromThenToEName,
1665 listEName, sigEName, recConEName, recUpdEName,
1669 guardedBName, normalBName,
1671 normalGEName, patGEName,
1673 bindSName, letSName, noBindSName, parSName,
1675 funDName, valDName, dataDName, newtypeDName, tySynDName,
1676 classDName, instanceDName, sigDName, forImpDName,
1677 pragInlDName, pragSpecDName, pragSpecInlDName,
1678 familyNoKindDName, familyKindDName, dataInstDName, newtypeInstDName,
1683 classPName, equalPName,
1685 isStrictName, notStrictName,
1687 normalCName, recCName, infixCName, forallCName,
1693 forallTName, varTName, conTName, appTName,
1694 tupleTName, arrowTName, listTName, sigTName,
1696 plainTVName, kindedTVName,
1698 starKName, arrowKName,
1700 cCallName, stdCallName,
1706 inlineSpecNoPhaseName, inlineSpecPhaseName,
1710 typeFamName, dataFamName,
1713 qTyConName, nameTyConName, patTyConName, fieldPatTyConName, matchQTyConName,
1714 clauseQTyConName, expQTyConName, fieldExpTyConName, predTyConName,
1715 stmtQTyConName, decQTyConName, conQTyConName, strictTypeQTyConName,
1716 varStrictTypeQTyConName, typeQTyConName, expTyConName, decTyConName,
1717 typeTyConName, tyVarBndrTyConName, matchTyConName, clauseTyConName,
1718 patQTyConName, fieldPatQTyConName, fieldExpQTyConName, funDepTyConName,
1722 quoteExpName, quotePatName]
1724 thSyn, thLib, qqLib :: Module
1725 thSyn = mkTHModule (fsLit "Language.Haskell.TH.Syntax")
1726 thLib = mkTHModule (fsLit "Language.Haskell.TH.Lib")
1727 qqLib = mkTHModule (fsLit "Language.Haskell.TH.Quote")
1729 mkTHModule :: FastString -> Module
1730 mkTHModule m = mkModule thPackageId (mkModuleNameFS m)
1732 libFun, libTc, thFun, thTc, qqFun :: FastString -> Unique -> Name
1733 libFun = mk_known_key_name OccName.varName thLib
1734 libTc = mk_known_key_name OccName.tcName thLib
1735 thFun = mk_known_key_name OccName.varName thSyn
1736 thTc = mk_known_key_name OccName.tcName thSyn
1737 qqFun = mk_known_key_name OccName.varName qqLib
1739 -------------------- TH.Syntax -----------------------
1740 qTyConName, nameTyConName, fieldExpTyConName, patTyConName,
1741 fieldPatTyConName, expTyConName, decTyConName, typeTyConName,
1742 tyVarBndrTyConName, matchTyConName, clauseTyConName, funDepTyConName,
1743 predTyConName :: Name
1744 qTyConName = thTc (fsLit "Q") qTyConKey
1745 nameTyConName = thTc (fsLit "Name") nameTyConKey
1746 fieldExpTyConName = thTc (fsLit "FieldExp") fieldExpTyConKey
1747 patTyConName = thTc (fsLit "Pat") patTyConKey
1748 fieldPatTyConName = thTc (fsLit "FieldPat") fieldPatTyConKey
1749 expTyConName = thTc (fsLit "Exp") expTyConKey
1750 decTyConName = thTc (fsLit "Dec") decTyConKey
1751 typeTyConName = thTc (fsLit "Type") typeTyConKey
1752 tyVarBndrTyConName= thTc (fsLit "TyVarBndr") tyVarBndrTyConKey
1753 matchTyConName = thTc (fsLit "Match") matchTyConKey
1754 clauseTyConName = thTc (fsLit "Clause") clauseTyConKey
1755 funDepTyConName = thTc (fsLit "FunDep") funDepTyConKey
1756 predTyConName = thTc (fsLit "Pred") predTyConKey
1758 returnQName, bindQName, sequenceQName, newNameName, liftName,
1759 mkNameName, mkNameG_vName, mkNameG_dName, mkNameG_tcName,
1760 mkNameLName, liftStringName :: Name
1761 returnQName = thFun (fsLit "returnQ") returnQIdKey
1762 bindQName = thFun (fsLit "bindQ") bindQIdKey
1763 sequenceQName = thFun (fsLit "sequenceQ") sequenceQIdKey
1764 newNameName = thFun (fsLit "newName") newNameIdKey
1765 liftName = thFun (fsLit "lift") liftIdKey
1766 liftStringName = thFun (fsLit "liftString") liftStringIdKey
1767 mkNameName = thFun (fsLit "mkName") mkNameIdKey
1768 mkNameG_vName = thFun (fsLit "mkNameG_v") mkNameG_vIdKey
1769 mkNameG_dName = thFun (fsLit "mkNameG_d") mkNameG_dIdKey
1770 mkNameG_tcName = thFun (fsLit "mkNameG_tc") mkNameG_tcIdKey
1771 mkNameLName = thFun (fsLit "mkNameL") mkNameLIdKey
1774 -------------------- TH.Lib -----------------------
1776 charLName, stringLName, integerLName, intPrimLName, wordPrimLName,
1777 floatPrimLName, doublePrimLName, rationalLName :: Name
1778 charLName = libFun (fsLit "charL") charLIdKey
1779 stringLName = libFun (fsLit "stringL") stringLIdKey
1780 integerLName = libFun (fsLit "integerL") integerLIdKey
1781 intPrimLName = libFun (fsLit "intPrimL") intPrimLIdKey
1782 wordPrimLName = libFun (fsLit "wordPrimL") wordPrimLIdKey
1783 floatPrimLName = libFun (fsLit "floatPrimL") floatPrimLIdKey
1784 doublePrimLName = libFun (fsLit "doublePrimL") doublePrimLIdKey
1785 rationalLName = libFun (fsLit "rationalL") rationalLIdKey
1788 litPName, varPName, tupPName, conPName, infixPName, tildePName, bangPName,
1789 asPName, wildPName, recPName, listPName, sigPName :: Name
1790 litPName = libFun (fsLit "litP") litPIdKey
1791 varPName = libFun (fsLit "varP") varPIdKey
1792 tupPName = libFun (fsLit "tupP") tupPIdKey
1793 conPName = libFun (fsLit "conP") conPIdKey
1794 infixPName = libFun (fsLit "infixP") infixPIdKey
1795 tildePName = libFun (fsLit "tildeP") tildePIdKey
1796 bangPName = libFun (fsLit "bangP") bangPIdKey
1797 asPName = libFun (fsLit "asP") asPIdKey
1798 wildPName = libFun (fsLit "wildP") wildPIdKey
1799 recPName = libFun (fsLit "recP") recPIdKey
1800 listPName = libFun (fsLit "listP") listPIdKey
1801 sigPName = libFun (fsLit "sigP") sigPIdKey
1803 -- type FieldPat = ...
1804 fieldPatName :: Name
1805 fieldPatName = libFun (fsLit "fieldPat") fieldPatIdKey
1809 matchName = libFun (fsLit "match") matchIdKey
1811 -- data Clause = ...
1813 clauseName = libFun (fsLit "clause") clauseIdKey
1816 varEName, conEName, litEName, appEName, infixEName, infixAppName,
1817 sectionLName, sectionRName, lamEName, tupEName, condEName,
1818 letEName, caseEName, doEName, compEName :: Name
1819 varEName = libFun (fsLit "varE") varEIdKey
1820 conEName = libFun (fsLit "conE") conEIdKey
1821 litEName = libFun (fsLit "litE") litEIdKey
1822 appEName = libFun (fsLit "appE") appEIdKey
1823 infixEName = libFun (fsLit "infixE") infixEIdKey
1824 infixAppName = libFun (fsLit "infixApp") infixAppIdKey
1825 sectionLName = libFun (fsLit "sectionL") sectionLIdKey
1826 sectionRName = libFun (fsLit "sectionR") sectionRIdKey
1827 lamEName = libFun (fsLit "lamE") lamEIdKey
1828 tupEName = libFun (fsLit "tupE") tupEIdKey
1829 condEName = libFun (fsLit "condE") condEIdKey
1830 letEName = libFun (fsLit "letE") letEIdKey
1831 caseEName = libFun (fsLit "caseE") caseEIdKey
1832 doEName = libFun (fsLit "doE") doEIdKey
1833 compEName = libFun (fsLit "compE") compEIdKey
1834 -- ArithSeq skips a level
1835 fromEName, fromThenEName, fromToEName, fromThenToEName :: Name
1836 fromEName = libFun (fsLit "fromE") fromEIdKey
1837 fromThenEName = libFun (fsLit "fromThenE") fromThenEIdKey
1838 fromToEName = libFun (fsLit "fromToE") fromToEIdKey
1839 fromThenToEName = libFun (fsLit "fromThenToE") fromThenToEIdKey
1841 listEName, sigEName, recConEName, recUpdEName :: Name
1842 listEName = libFun (fsLit "listE") listEIdKey
1843 sigEName = libFun (fsLit "sigE") sigEIdKey
1844 recConEName = libFun (fsLit "recConE") recConEIdKey
1845 recUpdEName = libFun (fsLit "recUpdE") recUpdEIdKey
1847 -- type FieldExp = ...
1848 fieldExpName :: Name
1849 fieldExpName = libFun (fsLit "fieldExp") fieldExpIdKey
1852 guardedBName, normalBName :: Name
1853 guardedBName = libFun (fsLit "guardedB") guardedBIdKey
1854 normalBName = libFun (fsLit "normalB") normalBIdKey
1857 normalGEName, patGEName :: Name
1858 normalGEName = libFun (fsLit "normalGE") normalGEIdKey
1859 patGEName = libFun (fsLit "patGE") patGEIdKey
1862 bindSName, letSName, noBindSName, parSName :: Name
1863 bindSName = libFun (fsLit "bindS") bindSIdKey
1864 letSName = libFun (fsLit "letS") letSIdKey
1865 noBindSName = libFun (fsLit "noBindS") noBindSIdKey
1866 parSName = libFun (fsLit "parS") parSIdKey
1869 funDName, valDName, dataDName, newtypeDName, tySynDName, classDName,
1870 instanceDName, sigDName, forImpDName, pragInlDName, pragSpecDName,
1871 pragSpecInlDName, familyNoKindDName, familyKindDName, dataInstDName,
1872 newtypeInstDName, tySynInstDName :: Name
1873 funDName = libFun (fsLit "funD") funDIdKey
1874 valDName = libFun (fsLit "valD") valDIdKey
1875 dataDName = libFun (fsLit "dataD") dataDIdKey
1876 newtypeDName = libFun (fsLit "newtypeD") newtypeDIdKey
1877 tySynDName = libFun (fsLit "tySynD") tySynDIdKey
1878 classDName = libFun (fsLit "classD") classDIdKey
1879 instanceDName = libFun (fsLit "instanceD") instanceDIdKey
1880 sigDName = libFun (fsLit "sigD") sigDIdKey
1881 forImpDName = libFun (fsLit "forImpD") forImpDIdKey
1882 pragInlDName = libFun (fsLit "pragInlD") pragInlDIdKey
1883 pragSpecDName = libFun (fsLit "pragSpecD") pragSpecDIdKey
1884 pragSpecInlDName = libFun (fsLit "pragSpecInlD") pragSpecInlDIdKey
1885 familyNoKindDName= libFun (fsLit "familyNoKindD")familyNoKindDIdKey
1886 familyKindDName = libFun (fsLit "familyKindD") familyKindDIdKey
1887 dataInstDName = libFun (fsLit "dataInstD") dataInstDIdKey
1888 newtypeInstDName = libFun (fsLit "newtypeInstD") newtypeInstDIdKey
1889 tySynInstDName = libFun (fsLit "tySynInstD") tySynInstDIdKey
1893 cxtName = libFun (fsLit "cxt") cxtIdKey
1896 classPName, equalPName :: Name
1897 classPName = libFun (fsLit "classP") classPIdKey
1898 equalPName = libFun (fsLit "equalP") equalPIdKey
1900 -- data Strict = ...
1901 isStrictName, notStrictName :: Name
1902 isStrictName = libFun (fsLit "isStrict") isStrictKey
1903 notStrictName = libFun (fsLit "notStrict") notStrictKey
1906 normalCName, recCName, infixCName, forallCName :: Name
1907 normalCName = libFun (fsLit "normalC") normalCIdKey
1908 recCName = libFun (fsLit "recC") recCIdKey
1909 infixCName = libFun (fsLit "infixC") infixCIdKey
1910 forallCName = libFun (fsLit "forallC") forallCIdKey
1912 -- type StrictType = ...
1913 strictTypeName :: Name
1914 strictTypeName = libFun (fsLit "strictType") strictTKey
1916 -- type VarStrictType = ...
1917 varStrictTypeName :: Name
1918 varStrictTypeName = libFun (fsLit "varStrictType") varStrictTKey
1921 forallTName, varTName, conTName, tupleTName, arrowTName,
1922 listTName, appTName, sigTName :: Name
1923 forallTName = libFun (fsLit "forallT") forallTIdKey
1924 varTName = libFun (fsLit "varT") varTIdKey
1925 conTName = libFun (fsLit "conT") conTIdKey
1926 tupleTName = libFun (fsLit "tupleT") tupleTIdKey
1927 arrowTName = libFun (fsLit "arrowT") arrowTIdKey
1928 listTName = libFun (fsLit "listT") listTIdKey
1929 appTName = libFun (fsLit "appT") appTIdKey
1930 sigTName = libFun (fsLit "sigT") sigTIdKey
1932 -- data TyVarBndr = ...
1933 plainTVName, kindedTVName :: Name
1934 plainTVName = libFun (fsLit "plainTV") plainTVIdKey
1935 kindedTVName = libFun (fsLit "kindedTV") kindedTVIdKey
1938 starKName, arrowKName :: Name
1939 starKName = libFun (fsLit "starK") starKIdKey
1940 arrowKName = libFun (fsLit "arrowK") arrowKIdKey
1942 -- data Callconv = ...
1943 cCallName, stdCallName :: Name
1944 cCallName = libFun (fsLit "cCall") cCallIdKey
1945 stdCallName = libFun (fsLit "stdCall") stdCallIdKey
1947 -- data Safety = ...
1948 unsafeName, safeName, threadsafeName :: Name
1949 unsafeName = libFun (fsLit "unsafe") unsafeIdKey
1950 safeName = libFun (fsLit "safe") safeIdKey
1951 threadsafeName = libFun (fsLit "threadsafe") threadsafeIdKey
1953 -- data InlineSpec = ...
1954 inlineSpecNoPhaseName, inlineSpecPhaseName :: Name
1955 inlineSpecNoPhaseName = libFun (fsLit "inlineSpecNoPhase") inlineSpecNoPhaseIdKey
1956 inlineSpecPhaseName = libFun (fsLit "inlineSpecPhase") inlineSpecPhaseIdKey
1958 -- data FunDep = ...
1960 funDepName = libFun (fsLit "funDep") funDepIdKey
1962 -- data FamFlavour = ...
1963 typeFamName, dataFamName :: Name
1964 typeFamName = libFun (fsLit "typeFam") typeFamIdKey
1965 dataFamName = libFun (fsLit "dataFam") dataFamIdKey
1967 matchQTyConName, clauseQTyConName, expQTyConName, stmtQTyConName,
1968 decQTyConName, conQTyConName, strictTypeQTyConName,
1969 varStrictTypeQTyConName, typeQTyConName, fieldExpQTyConName,
1970 patQTyConName, fieldPatQTyConName, predQTyConName :: Name
1971 matchQTyConName = libTc (fsLit "MatchQ") matchQTyConKey
1972 clauseQTyConName = libTc (fsLit "ClauseQ") clauseQTyConKey
1973 expQTyConName = libTc (fsLit "ExpQ") expQTyConKey
1974 stmtQTyConName = libTc (fsLit "StmtQ") stmtQTyConKey
1975 decQTyConName = libTc (fsLit "DecQ") decQTyConKey
1976 conQTyConName = libTc (fsLit "ConQ") conQTyConKey
1977 strictTypeQTyConName = libTc (fsLit "StrictTypeQ") strictTypeQTyConKey
1978 varStrictTypeQTyConName = libTc (fsLit "VarStrictTypeQ") varStrictTypeQTyConKey
1979 typeQTyConName = libTc (fsLit "TypeQ") typeQTyConKey
1980 fieldExpQTyConName = libTc (fsLit "FieldExpQ") fieldExpQTyConKey
1981 patQTyConName = libTc (fsLit "PatQ") patQTyConKey
1982 fieldPatQTyConName = libTc (fsLit "FieldPatQ") fieldPatQTyConKey
1983 predQTyConName = libTc (fsLit "PredQ") predQTyConKey
1986 quoteExpName, quotePatName :: Name
1987 quoteExpName = qqFun (fsLit "quoteExp") quoteExpKey
1988 quotePatName = qqFun (fsLit "quotePat") quotePatKey
1990 -- TyConUniques available: 100-129
1991 -- Check in PrelNames if you want to change this
1993 expTyConKey, matchTyConKey, clauseTyConKey, qTyConKey, expQTyConKey,
1994 decQTyConKey, patTyConKey, matchQTyConKey, clauseQTyConKey,
1995 stmtQTyConKey, conQTyConKey, typeQTyConKey, typeTyConKey, tyVarBndrTyConKey,
1996 decTyConKey, varStrictTypeQTyConKey, strictTypeQTyConKey,
1997 fieldExpTyConKey, fieldPatTyConKey, nameTyConKey, patQTyConKey,
1998 fieldPatQTyConKey, fieldExpQTyConKey, funDepTyConKey, predTyConKey,
1999 predQTyConKey :: Unique
2000 expTyConKey = mkPreludeTyConUnique 100
2001 matchTyConKey = mkPreludeTyConUnique 101
2002 clauseTyConKey = mkPreludeTyConUnique 102
2003 qTyConKey = mkPreludeTyConUnique 103
2004 expQTyConKey = mkPreludeTyConUnique 104
2005 decQTyConKey = mkPreludeTyConUnique 105
2006 patTyConKey = mkPreludeTyConUnique 106
2007 matchQTyConKey = mkPreludeTyConUnique 107
2008 clauseQTyConKey = mkPreludeTyConUnique 108
2009 stmtQTyConKey = mkPreludeTyConUnique 109
2010 conQTyConKey = mkPreludeTyConUnique 110
2011 typeQTyConKey = mkPreludeTyConUnique 111
2012 typeTyConKey = mkPreludeTyConUnique 112
2013 tyVarBndrTyConKey = mkPreludeTyConUnique 125
2014 decTyConKey = mkPreludeTyConUnique 113
2015 varStrictTypeQTyConKey = mkPreludeTyConUnique 114
2016 strictTypeQTyConKey = mkPreludeTyConUnique 115
2017 fieldExpTyConKey = mkPreludeTyConUnique 116
2018 fieldPatTyConKey = mkPreludeTyConUnique 117
2019 nameTyConKey = mkPreludeTyConUnique 118
2020 patQTyConKey = mkPreludeTyConUnique 119
2021 fieldPatQTyConKey = mkPreludeTyConUnique 120
2022 fieldExpQTyConKey = mkPreludeTyConUnique 121
2023 funDepTyConKey = mkPreludeTyConUnique 122
2024 predTyConKey = mkPreludeTyConUnique 123
2025 predQTyConKey = mkPreludeTyConUnique 124
2027 -- IdUniques available: 200-399
2028 -- If you want to change this, make sure you check in PrelNames
2030 returnQIdKey, bindQIdKey, sequenceQIdKey, liftIdKey, newNameIdKey,
2031 mkNameIdKey, mkNameG_vIdKey, mkNameG_dIdKey, mkNameG_tcIdKey,
2032 mkNameLIdKey :: Unique
2033 returnQIdKey = mkPreludeMiscIdUnique 200
2034 bindQIdKey = mkPreludeMiscIdUnique 201
2035 sequenceQIdKey = mkPreludeMiscIdUnique 202
2036 liftIdKey = mkPreludeMiscIdUnique 203
2037 newNameIdKey = mkPreludeMiscIdUnique 204
2038 mkNameIdKey = mkPreludeMiscIdUnique 205
2039 mkNameG_vIdKey = mkPreludeMiscIdUnique 206
2040 mkNameG_dIdKey = mkPreludeMiscIdUnique 207
2041 mkNameG_tcIdKey = mkPreludeMiscIdUnique 208
2042 mkNameLIdKey = mkPreludeMiscIdUnique 209
2046 charLIdKey, stringLIdKey, integerLIdKey, intPrimLIdKey, wordPrimLIdKey,
2047 floatPrimLIdKey, doublePrimLIdKey, rationalLIdKey :: Unique
2048 charLIdKey = mkPreludeMiscIdUnique 210
2049 stringLIdKey = mkPreludeMiscIdUnique 211
2050 integerLIdKey = mkPreludeMiscIdUnique 212
2051 intPrimLIdKey = mkPreludeMiscIdUnique 213
2052 wordPrimLIdKey = mkPreludeMiscIdUnique 214
2053 floatPrimLIdKey = mkPreludeMiscIdUnique 215
2054 doublePrimLIdKey = mkPreludeMiscIdUnique 216
2055 rationalLIdKey = mkPreludeMiscIdUnique 217
2057 liftStringIdKey :: Unique
2058 liftStringIdKey = mkPreludeMiscIdUnique 218
2061 litPIdKey, varPIdKey, tupPIdKey, conPIdKey, infixPIdKey, tildePIdKey, bangPIdKey,
2062 asPIdKey, wildPIdKey, recPIdKey, listPIdKey, sigPIdKey :: Unique
2063 litPIdKey = mkPreludeMiscIdUnique 220
2064 varPIdKey = mkPreludeMiscIdUnique 221
2065 tupPIdKey = mkPreludeMiscIdUnique 222
2066 conPIdKey = mkPreludeMiscIdUnique 223
2067 infixPIdKey = mkPreludeMiscIdUnique 312
2068 tildePIdKey = mkPreludeMiscIdUnique 224
2069 bangPIdKey = mkPreludeMiscIdUnique 359
2070 asPIdKey = mkPreludeMiscIdUnique 225
2071 wildPIdKey = mkPreludeMiscIdUnique 226
2072 recPIdKey = mkPreludeMiscIdUnique 227
2073 listPIdKey = mkPreludeMiscIdUnique 228
2074 sigPIdKey = mkPreludeMiscIdUnique 229
2076 -- type FieldPat = ...
2077 fieldPatIdKey :: Unique
2078 fieldPatIdKey = mkPreludeMiscIdUnique 230
2081 matchIdKey :: Unique
2082 matchIdKey = mkPreludeMiscIdUnique 231
2084 -- data Clause = ...
2085 clauseIdKey :: Unique
2086 clauseIdKey = mkPreludeMiscIdUnique 232
2090 varEIdKey, conEIdKey, litEIdKey, appEIdKey, infixEIdKey, infixAppIdKey,
2091 sectionLIdKey, sectionRIdKey, lamEIdKey, tupEIdKey, condEIdKey,
2092 letEIdKey, caseEIdKey, doEIdKey, compEIdKey,
2093 fromEIdKey, fromThenEIdKey, fromToEIdKey, fromThenToEIdKey,
2094 listEIdKey, sigEIdKey, recConEIdKey, recUpdEIdKey :: Unique
2095 varEIdKey = mkPreludeMiscIdUnique 240
2096 conEIdKey = mkPreludeMiscIdUnique 241
2097 litEIdKey = mkPreludeMiscIdUnique 242
2098 appEIdKey = mkPreludeMiscIdUnique 243
2099 infixEIdKey = mkPreludeMiscIdUnique 244
2100 infixAppIdKey = mkPreludeMiscIdUnique 245
2101 sectionLIdKey = mkPreludeMiscIdUnique 246
2102 sectionRIdKey = mkPreludeMiscIdUnique 247
2103 lamEIdKey = mkPreludeMiscIdUnique 248
2104 tupEIdKey = mkPreludeMiscIdUnique 249
2105 condEIdKey = mkPreludeMiscIdUnique 250
2106 letEIdKey = mkPreludeMiscIdUnique 251
2107 caseEIdKey = mkPreludeMiscIdUnique 252
2108 doEIdKey = mkPreludeMiscIdUnique 253
2109 compEIdKey = mkPreludeMiscIdUnique 254
2110 fromEIdKey = mkPreludeMiscIdUnique 255
2111 fromThenEIdKey = mkPreludeMiscIdUnique 256
2112 fromToEIdKey = mkPreludeMiscIdUnique 257
2113 fromThenToEIdKey = mkPreludeMiscIdUnique 258
2114 listEIdKey = mkPreludeMiscIdUnique 259
2115 sigEIdKey = mkPreludeMiscIdUnique 260
2116 recConEIdKey = mkPreludeMiscIdUnique 261
2117 recUpdEIdKey = mkPreludeMiscIdUnique 262
2119 -- type FieldExp = ...
2120 fieldExpIdKey :: Unique
2121 fieldExpIdKey = mkPreludeMiscIdUnique 265
2124 guardedBIdKey, normalBIdKey :: Unique
2125 guardedBIdKey = mkPreludeMiscIdUnique 266
2126 normalBIdKey = mkPreludeMiscIdUnique 267
2129 normalGEIdKey, patGEIdKey :: Unique
2130 normalGEIdKey = mkPreludeMiscIdUnique 310
2131 patGEIdKey = mkPreludeMiscIdUnique 311
2134 bindSIdKey, letSIdKey, noBindSIdKey, parSIdKey :: Unique
2135 bindSIdKey = mkPreludeMiscIdUnique 268
2136 letSIdKey = mkPreludeMiscIdUnique 269
2137 noBindSIdKey = mkPreludeMiscIdUnique 270
2138 parSIdKey = mkPreludeMiscIdUnique 271
2141 funDIdKey, valDIdKey, dataDIdKey, newtypeDIdKey, tySynDIdKey,
2142 classDIdKey, instanceDIdKey, sigDIdKey, forImpDIdKey, pragInlDIdKey,
2143 pragSpecDIdKey, pragSpecInlDIdKey, familyNoKindDIdKey, familyKindDIdKey,
2144 dataInstDIdKey, newtypeInstDIdKey, tySynInstDIdKey :: Unique
2145 funDIdKey = mkPreludeMiscIdUnique 272
2146 valDIdKey = mkPreludeMiscIdUnique 273
2147 dataDIdKey = mkPreludeMiscIdUnique 274
2148 newtypeDIdKey = mkPreludeMiscIdUnique 275
2149 tySynDIdKey = mkPreludeMiscIdUnique 276
2150 classDIdKey = mkPreludeMiscIdUnique 277
2151 instanceDIdKey = mkPreludeMiscIdUnique 278
2152 sigDIdKey = mkPreludeMiscIdUnique 279
2153 forImpDIdKey = mkPreludeMiscIdUnique 297
2154 pragInlDIdKey = mkPreludeMiscIdUnique 348
2155 pragSpecDIdKey = mkPreludeMiscIdUnique 349
2156 pragSpecInlDIdKey = mkPreludeMiscIdUnique 352
2157 familyNoKindDIdKey= mkPreludeMiscIdUnique 340
2158 familyKindDIdKey = mkPreludeMiscIdUnique 353
2159 dataInstDIdKey = mkPreludeMiscIdUnique 341
2160 newtypeInstDIdKey = mkPreludeMiscIdUnique 342
2161 tySynInstDIdKey = mkPreludeMiscIdUnique 343
2165 cxtIdKey = mkPreludeMiscIdUnique 280
2168 classPIdKey, equalPIdKey :: Unique
2169 classPIdKey = mkPreludeMiscIdUnique 346
2170 equalPIdKey = mkPreludeMiscIdUnique 347
2172 -- data Strict = ...
2173 isStrictKey, notStrictKey :: Unique
2174 isStrictKey = mkPreludeMiscIdUnique 281
2175 notStrictKey = mkPreludeMiscIdUnique 282
2178 normalCIdKey, recCIdKey, infixCIdKey, forallCIdKey :: Unique
2179 normalCIdKey = mkPreludeMiscIdUnique 283
2180 recCIdKey = mkPreludeMiscIdUnique 284
2181 infixCIdKey = mkPreludeMiscIdUnique 285
2182 forallCIdKey = mkPreludeMiscIdUnique 288
2184 -- type StrictType = ...
2185 strictTKey :: Unique
2186 strictTKey = mkPreludeMiscIdUnique 286
2188 -- type VarStrictType = ...
2189 varStrictTKey :: Unique
2190 varStrictTKey = mkPreludeMiscIdUnique 287
2193 forallTIdKey, varTIdKey, conTIdKey, tupleTIdKey, arrowTIdKey,
2194 listTIdKey, appTIdKey, sigTIdKey :: Unique
2195 forallTIdKey = mkPreludeMiscIdUnique 290
2196 varTIdKey = mkPreludeMiscIdUnique 291
2197 conTIdKey = mkPreludeMiscIdUnique 292
2198 tupleTIdKey = mkPreludeMiscIdUnique 294
2199 arrowTIdKey = mkPreludeMiscIdUnique 295
2200 listTIdKey = mkPreludeMiscIdUnique 296
2201 appTIdKey = mkPreludeMiscIdUnique 293
2202 sigTIdKey = mkPreludeMiscIdUnique 358
2204 -- data TyVarBndr = ...
2205 plainTVIdKey, kindedTVIdKey :: Unique
2206 plainTVIdKey = mkPreludeMiscIdUnique 354
2207 kindedTVIdKey = mkPreludeMiscIdUnique 355
2210 starKIdKey, arrowKIdKey :: Unique
2211 starKIdKey = mkPreludeMiscIdUnique 356
2212 arrowKIdKey = mkPreludeMiscIdUnique 357
2214 -- data Callconv = ...
2215 cCallIdKey, stdCallIdKey :: Unique
2216 cCallIdKey = mkPreludeMiscIdUnique 300
2217 stdCallIdKey = mkPreludeMiscIdUnique 301
2219 -- data Safety = ...
2220 unsafeIdKey, safeIdKey, threadsafeIdKey :: Unique
2221 unsafeIdKey = mkPreludeMiscIdUnique 305
2222 safeIdKey = mkPreludeMiscIdUnique 306
2223 threadsafeIdKey = mkPreludeMiscIdUnique 307
2225 -- data InlineSpec =
2226 inlineSpecNoPhaseIdKey, inlineSpecPhaseIdKey :: Unique
2227 inlineSpecNoPhaseIdKey = mkPreludeMiscIdUnique 350
2228 inlineSpecPhaseIdKey = mkPreludeMiscIdUnique 351
2230 -- data FunDep = ...
2231 funDepIdKey :: Unique
2232 funDepIdKey = mkPreludeMiscIdUnique 320
2234 -- data FamFlavour = ...
2235 typeFamIdKey, dataFamIdKey :: Unique
2236 typeFamIdKey = mkPreludeMiscIdUnique 344
2237 dataFamIdKey = mkPreludeMiscIdUnique 345
2240 quoteExpKey, quotePatKey :: Unique
2241 quoteExpKey = mkPreludeMiscIdUnique 321
2242 quotePatKey = mkPreludeMiscIdUnique 322