Oleg,
I am using GHC 6.12.3
Here a reproduction:
in the file Template.hs
proc () = runIO $ do runQ [|1+1|]
proc' () = [|1+1|]
In the file Main.hs
i1 = $(proc ()) -- fails at compile time with "Segmentation fault/access violation in generated code". Maybe is it the expected behavior, I do not know.
i2 = $(proc' ()) -- sucessfull
i3 = proc() -- sucessful but proc is executed at "runtime"
main = ...
Hope it is clear enough otherwise let me know.
Regards
J-C
Hello!
With TH, it becomes a bit difficult to tell what is exactly `compile
> But, please, correct me if I am wrong, in your example, the splicer are
> executed at run time and not at compile time.
time'. One can say however that when the code is ready to be spliced
in at the top level, the IO actions in its splices must have been
completed.
As I mentioned, the code was specifically designed to cause something
> I have modified your example to make it run at compile time and I get a
> (compile time) segmentation fault.
like segmentation fault. Sneaking out free variables is definitely the
bad thing. The principle of exchanging data between splices (using
runQ/runIO) is valid and could be used for good things, too.
I am wondering though what GHC version and command-line parameters are
you using? On my system. with GHC 6.10.3, I tried running the original
and modified code in GHCi and GHC (with and without -O2) and did not
get segmentation fault. Could you provide more details about your
system so to reproduce the segfault? I think Simon Peyton-Jones would
really like to know all that.
Cheers,
Oleg