[Haskell-cafe] Generating Code

L Corbijn aspergesoepje at gmail.com
Sat Dec 10 18:17:55 CET 2011


On Sat, Dec 10, 2011 at 1:59 PM, Geoffrey Mainland <mainland at apeiron.net> wrote:
> On 12/10/2011 09:38, Iustin Pop wrote:
>> On Fri, Dec 09, 2011 at 10:30:18PM +0100, L Corbijn wrote:
>>> The major set of problems for using template haskell is that it
>>> doesn't have the correct features, or better said it tries to solve
>>> another problem. Template haskell generates code into an existing
>>> module, while for this problem there is no module yet to generate it
>>> into. Of course I could generate those modules and let template
>>> haskell make the FFI imports, but then the problem remains how to
>>> generate those modules. So template haskell seems (as I see it) to
>>> solve the problem of writing almost the same code twice by generating
>>> it from some parameters coded in some source file. Another problem is
>>> that the export and import lists of the modules need to be generated
>>> too and this seems not an option for TH.
>>
>> On Fri, Dec 09, 2011 at 04:27:31PM -0600, Antoine Latter wrote:
>>> For my case, template haskell can't create modules, and template
>>> haskell solves a different problem - I've not interested in creating
>>> Haskell declarations from Haskell declarations - I'm interested in
>>> creating Haskell modules from an external, formal,  specification. In
>>> a sense I'm compiling to Haskell.
>>
>> This answer is for both the above quotes. While TH is not perfect (and
>> sometimes tedious/difficult to write in), it's not restricted to simply
>> generate code based on some parameters in an existing Haskell file.
>>
>> It cannot generate modules, true, but other than that you could have a
>> module simply like this:
>>
>>   module Foo where
>>
>>   import …
>>
>>   $(myBuilder)
>>
>> Where myBuilder doesn't take any parameters, just reads some external
>> (XML, text file, whatever) and build the code from scratch.
>>
>> I might misunderstand the problem, but I think that you _could_ use TH
>> for "compiling" to Haskell, as long as you have a Haskell parser for the
>> external/formal spec.
>>
>> regards,
>> iustin
>
> There are the haskell-src-exts-qq and haskell-src-meta packages on
> hackage that will get you partway to generating source code for a
> Haskell module. Full support for Haskell quasiquotation would require a
> modified version of haskell-src-exts (to properly handle antiquotation).
>
> The problem with TH is that it runs when the module is compiled. Reading
> a spec in from a file within a TH quote is possible, but it would be
> much nicer to be able to write a code generator, which a full Haskell
> quasiquoter would allow.
>
> Maybe someone is interested in a side-project? :)
>
> Geoff
>
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

I hadn't really considered using quasi quotation for the generating
part, but reading some things about it it seems to be nice use. In
absence of quasi quotation I've, just as Antoine Latter, made a
library of several helper functions to make code generating easier.
Thank you for bringing quasi quotation to my attention.



More information about the Haskell-Cafe mailing list