Yes, that's right. But with a compatibility shim, no longer tied into GHC, that 
could provide stability and/or a simpler interface. This compatibility shim 
would likely be called template-haskell. (I retract the idea of deprecating the 
package. But we could democratize its maintenance rather easily after this 
change.)

Richard

On Nov 12, 2015, at 12:12 PM, Geoffrey Mainland <mainl...@apeiron.net> wrote:

> Hi Richard,
> 
> Please correct me if I misunderstand, but in summary, you propose to
> change Template Haskell so that GHC's internal AST is produced directly,
> instead of the current route where there is an intermediate TH AST?
> 
> Geoff
> 
> On 11/11/2015 11:26 AM, Richard Eisenberg wrote:
>> Hi devs,
>> 
>> There's a bunch of open tickets around Template Haskell. A great many of 
>> them are attempts to make TH more like what's already in GHC. Of course, 
>> when someone improves GHC, then TH also has to be updated. But this doesn't 
>> always happen, leading to several of these tickets.
>> 
>> I believe I have a solution to the problem: just eliminate Template Haskell 
>> and provide direct access to GHC's internal structures. The idea (still very 
>> sketchy; hence pre-proposal) is like this (numbered for easy reference, but 
>> no order is implied):
>> 
>> 1. TH quotes would remain. DsMeta would desugar quotes into Core code that 
>> produces HsExprs. For example, [| 1 |] would have type (Q (LHsExpr Name)). 
>> (Or perhaps (Q (LHsExpr RdrName)) if that works out better for clients.)
>> 
>> 2. TH splices would remain, working much as they do now. The expression 
>> inside, say, an expression splice would have type (Q exp) where we can 
>> satisfy the constraint (SpliceExpr exp). There would be instances for 
>> (SpliceExpr (LHsExpr Name)) and (SpliceExpr (LHsExpr RdrName)) as well as 
>> the non-located variants. Generalizing the type of expressions here allows 
>> users not to worry about un-renaming when roundtripping between quotes and 
>> splices.
>> 
>> 3. Reification would remain, using an Info structure much like we have now. 
>> Would we expose the real GHC TyCons as the result of reification? Or is it 
>> better to give the users HsDecls? This would need to be fleshed out.
>> 
>> 4. Lifting would remain, doing the obvious thing.
>> 
>> 5. The template-haskell package could even remain, as a 
>> backward-compatibility shim. It would declare gobs of pattern synonyms and 
>> type synonyms to wrap the new underlying interface. This re-imagined 
>> template-haskell package would not need to be a boot library, and could be 
>> upgraded separately from GHC. We could even maintain multiple versions of 
>> the library so that TH clients wouldn't have to change their code when GHC 
>> upgrades. Perhaps someday we could think about deprecating, if that's the 
>> way the wind blows.
>> 
>> So, the end result is a completely re-engineered TH, but I believe we could 
>> keep full backward compatibility. (I have not considered Typed TH in any 
>> depth yet. But my hope is that it's not too different from the above.) And, 
>> we're left with a significantly lower maintenance burden, especially if we 
>> eliminate template-haskell someday.
>> 
>> And, tantalizingly, the flexibility in splices might allow us to splice in 
>> *Core* code someday. Perhaps we could also reify Core code. Then clients 
>> could write their own custom, domain-aware optimizations. Like RULES on 
>> steroids. But that's all for the next phase. (Giving due credit, this last 
>> bit is inspired by work David Christiansen is doing in Idris.)
>> 
>> What's wrong with this idea? I feel like *something* has to be more 
>> complicated than I've made it seem!
>> 
>> Richard
>> _______________________________________________
>> ghc-devs mailing list
>> ghc-devs@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
>> 
> 

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to