But you need an expression that, say, produces a PlainTV. Where are you going to find an expression that does this without using the template-haskell library?
On Dec 17, 2014, at 2:33 PM, Jan Stolarek <jan.stola...@p.lodz.pl> wrote: > Thanks. That helps but I still don't understand why the calls are delegated > to template-haskell > library. Couldn't all of this be done locally? > > Janek > > Dnia środa, 17 grudnia 2014, Richard Eisenberg napisał: >> On Dec 17, 2014, at 12:29 PM, Jan Stolarek <jan.stola...@p.lodz.pl> wrote: >>> Why not implement repPlainTV like this: ? >>> >>> repPlainTV :: Core TH.Name -> DsM (Core TH.TyVarBndr) >>> repPlainTV (MkC nm) = return $ MkC (TH.PlainTV nm) >> >> In short, that's ill typed. We have >> >>> newtype Core a = MkC CoreExpr >> >> The idea behind this type is that its (phantom) type parameter tracks the >> type of the expression stored within. Of course, the thing within is always >> just a core expression. TH.PlainTV takes a TH.Name and produces a >> TH.TyVarBndr. But, nm is a CoreExpr and MkC is expecting a CoreExpr, so >> your suggestion wouldn't type check. >> >> The higher-level answer is that you're mixing levels. The goal in DsMeta is >> *not* to create the TH AST. It's to create *core expressions* that create >> the TH AST. >> >> Does this help? >> >> Richard > > > _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs