[Haskell-cafe] Scoping in template haskell
loppermann at acm.org
Wed Mar 19 08:17:55 EDT 2008
I am trying to get familiar with template haskell and I'm wondering
whether the following is possible and if so, how it would be done
I have two templates, and I'd like to use one from the other. For
instance the first one might be
gen1 :: Int -> ExpQ
gen1 i = [| "<<" ++ (show i) ++ ">>" |]
Thus, I gould do
> $(gen1 42)
and I'd get "<<42>>"
now I'd like to use gen2 in another generated expression so that I could so
> $(gen2 [42, 66])
and get "<<42>><<66>>"
My naive intention was to write
gen2 :: [Int] -> ExpQ
gen2 is = [| map (\x -> $(gen1 x)) is |]
which gives me "Stage error: `x' is bound at stage 2 but used at stage 1
So I guess my actual question would be: how do I pass a variable bound
outside a quotation into another splice used in that quotation?
More information about the Haskell-Cafe