Jean-Christophe Mincke wrote: > Does anyone know a clean solution to pass information between 2 executions > of splicers. > > $(splicer ....) -- first invocation gather and store some data > .... > $(splicer ...) -- second one use the data gathered above.
Just the other day I wrote such code; I'm not sure it qualifies as a `clean solution' as it was meant for a nefarious purpose. > e2 = runIO $ do > varref <- newIORef undefined > let put v = runIO $ do > putStrLn "put" > writeIORef varref v > runQ [|$v + 1|] > let get v = runIO $ do > putStrLn "get" > vold <- readIORef varref > runQ [|$v + $vold|] > > c1 <- runQ [|\x -> $(put [|x|]) + 1::Int|] > c2 <- runQ [|\x -> $(get [|x|]) + 1::Int|] > runQ $ [| ($(return c1),$(return c2)) |] > > show_code cde = runQ cde >>= putStrLn . pprint > te2 = show_code e2 One may even try to splice e2 at the top level (in a different module). The code does exchange data between two splicers -- one may argue, it exchanges too much data. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe