[Haskell-cafe] Re: Another Quasi-Quotation question

Geoffrey Mainland mainland at eecs.harvard.edu
Wed Nov 24 12:15:13 EST 2010


On 11/24/2010 03:14, jean-christophe mincke wrote:
> Hello,
> 
> I am still playing with template-haskell...
> 
> I wonder, is there any reason why a quasiquoter cannot create haskell
> statements and declarations in addition to expressions and patterns? Or
> more generally create any legal Haskell syntax tree.

In GHC 7, quasiquotes can appear in place of expressions, patterns,
types and top-level declarations. The latter two are new (see [1]).

> I.e Suppose I would like to create a quasiquoter for the C language
> (please, imagine that it could be useful).

It is useful, and it already exists [2] :)

> I could write sth such as :
> 
> [$c|
> 
> int a = 6;
> int b = 7;
> int c = a +b;
> 
> struct S { int x; int y}
> |]
> 
> It could be nice to generate the appropriate haskell code:
> 
> a = 6
> b= 7
> c= a + b
> data S = S {  x::Int; y:Int}
> etc

language-c-quote doesn't translate C to Haskell, but lets you build C
abstract syntax trees using C's concrete syntax.

> That would allow to really embed any kind of language in a more or less
> easy way into haskell, provided that code can be translated into legal
> haskell.
>  
> Is there anything that prevent these features.

Check out GHC 7. The ability to quasiquote top-level definitions is
being used in the Haskell version of PADS [3].

> Thank you
> 
> Regards
> 
> J-C

Geoff

[1]
http://new-www.haskell.org/ghc/docs/7.0.1/html/users_guide/template-haskell.html#th-quasiquotation

[2] http://hackage.haskell.org/package/language-c-quote

[3] http://www.padsproj.org/



More information about the Haskell-Cafe mailing list