I'm trying to load my interpreter in the Q monad:
cr :: QuasiQuoter
cr = QuasiQuoter { quoteExp = quoteRuleFunc}
quoteRuleFunc :: String -> Q TH.Exp
quoteRuleFunc s = do
res <- runIO $ runInterpreter $ do
setImports ["Prelude", "Language.Nomyx.Rule", "Language.Nomyx.Expression", "Language.Nomyx.Test",
"Language.Nomyx.Examples", "GHC.Base", "Data.Maybe"]
interpret s (as :: RuleFunc)
case res of
Right _ -> [| s |]
Left e -> fail $ show e
However, I always obtain an error durring compilation:
...
Loading package XXX ... linking ... done.
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
__stginit_ghczm7zi4zi1_DsMeta
whilst processing object file
/usr/lib/ghc/ghc-7.4.1/libHSghc-7.4.1.a
This could be caused by:
* Loading two different object files which export the same symbol
* Specifying the same object file twice on the GHCi command line
* An incorrect `package.conf' entry, causing some object to be
loaded twice.
GHCi cannot safely continue in this situation. Exiting now. Sorry.
I vaguely understand that the interpreted modules are conflicting with the compiled ones...
Great! That seems very powerful. So you can do what you want during compilation, readin files, send data over the network?
Other question, in my example how can I halt the compilation if a test program is wrong?
On Fri, Feb 22, 2013 at 8:30 PM, Francesco Mazzoli <f@mazzo.li> wrote:At Fri, 22 Feb 2013 19:43:51 +0100,
Corentin Dupont wrote:Yes, you can:
> Hi Adam,
> that looks interresting. I'm totally new to TH and QuasiQuotes, though.
> Can I run IO in a QuasiQuoter? I can run my own interpreter.
<http://hackage.haskell.org/packages/archive/template-haskell/2.8.0.0/doc/html/Language-Haskell-TH.html#v:runIO>.
Francesco