[Haskell-cafe] Dynamically typing TH.Exp at runtime
Martin Hofmann
martin.hofmann at uni-bamberg.de
Thu Mar 12 10:37:54 EDT 2009
I am doing meta-programming at runtime. So my program gets a full
Haskell declaration in expression quotation ([d|...|]) modifies it and
returns the modified expression. Therefore, I need type information of
this expression, and any subexpression, at _runtime_ ! For example:
[d| reverse x1 = y1 |]
- rewrites_to ->
[d| reverse x2:xs = y2:ys |]
- rewrites_to ->
[d| reverse x:xs = reverse xs ++ [x] |]
reverse :: [a] -> [a] implies
x2,y2 :: a
x1,y1,xs,ys :: [a]
TH.reify is not applicable, because I need the information at runtime
and I am in IO. I suppose Data.Dynamic does not work either, because [|
xs|] :: ExpQ and not [a].
So it looks like I need my own type checker and inference and tag each
subexpression with its type. If so, I can even omit TH and use my own
data type for the abstract syntax tree. This annoys me a bit, because
for me it seems that all I need is already there.
Did anybody have similar problems, because I shouldn't be the only one
doing dynamic typing in a static language? Is there a Haskell
implementation of the paper "Typing Dynamic Typing" by Baars and
Swierstra (http://people.cs.uu.nl/arthurb/dynamic.html ), so I can try
out if this helps me?
Any help, comments, and how-to-suggestions are highly welcome.
Thanks a lot,
Martin
More information about the Haskell-Cafe
mailing list