Understanding DsMeta module

Richard Eisenberg eir at cis.upenn.edu
Wed Dec 17 19:35:03 UTC 2014


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.stolarek at 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.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