Template Haskell crashes unexpectedly...

Brian Hulley brianh at metamilk.com
Mon Aug 21 17:16:08 EDT 2006


Bulat Ziganshin wrote:
> as you can see, it don't supports reification, recovery and
> information about currently compiled module just because there is no
> such information when program runs. and of course, you can't add new
> fields or new functions at run-time. isntead typical technique is:
>
> $(transform [d| data D = X {f::Int, g::String} |] )
>
> where 'transform' parses declaration passed and generates something
> like this
>
> data D = X {unique::Int, f::Int, g::String}
>

Thanks - by coincidence I was also coming to this conclusion after reading 
the tutorial because it avoids the nusiance of being left with unwanted 
data/instance decls in the module (and the need to rename everything when 
generating the extended data/instance decls to avoid conflicts with field 
names etc).

The solution seems to be something like:

    $(extend_data [d|
            data D = X {f::Int, g::String}
        |])

    $(extend_instance [d|
            instance Obj D where
                ...
        |])

for some fairly trivial extend functions which will just add the AST for the 
extra field and method to the AST of the data and instance respectively, and 
by the idea in http://www.haskell.org/bz/th3.htm I can just use ghci to get 
the extra syntax trees to copy and paste into my extend functions.

Still it's too late tonight to do any more programming so I'll have to leave 
this for tomorrow... ! ;-)

Best regards, Brian.
-- 
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.

http://www.metamilk.com 



More information about the Glasgow-haskell-users mailing list