Understanding DsMeta module
Jan Stolarek
jan.stolarek at p.lodz.pl
Wed Dec 17 19:33:39 UTC 2014
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.stolarek at 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
More information about the ghc-devs
mailing list