Quasi quoting

Sebastian Fischer sebf at informatik.uni-kiel.de
Wed Feb 3 09:07:52 EST 2010

On Feb 3, 2010, at 1:48 AM, Max Bolingbroke wrote:

> 2010/2/2 Twan van Laarhoven <twanvl at gmail.com>:
>>    class Quoted a where
>>        parseQuote :: String -> a
>>        -- for performance reasons:
>>        parseQuote' :: Ghc.PackedString -> a
> Great idea!
> Thinking about it, you can use type classes to dispose of the
> QuasiQuote record entirely. Instead, have:
> class MyLang a where
>  myLang :: String -> Q a
> instance MyLang Exp where
>  myLang = myLangSyntaxToGHCExprForSplice . myLangExpParser
> ... etc, MyLang instances for Pat and Type too ...

With a class-based approach only one parser that creates values of the  
same type could be used in a program. It would not be possible to  
embed multiple languages that create TH.Exp to be spliced into a  
single program. With the current syntax, I can write [$myLang| ... |]  
and [$yourLang| ... |] in the same program and use different parsers  
although both create Exp values.

> And then write:
> $(myLang [|...|])

This is more verbose than the proposed [myLang| ... |]. There seem to  
be different goals in the different proposals in this thread: 1.  
Simplify the syntax for quasi quoting (remove $, use different  
brackets), 2. make it more generally applicable (allow declarations  
and/or types to be quasi quoted), and 3. simplify and generalise its  
implementation (invent a single mechanism that unifies quasi quoting  
and TH splicing).


Underestimating the novelty of the future is a time-honored tradition.

More information about the Glasgow-haskell-users mailing list