Finally, I solved the problem using typeOf instead of interpret: cr :: QuasiQuoter cr = QuasiQuoter { quoteExp = quoteRuleFunc}
quoteRuleFunc :: String -> Q TH.Exp quoteRuleFunc s = do res <- runIO $ runInterpreter $ do setImports ["Prelude", "Language.Nomyx.Expression"] typeOf s case res of Right "RuleFunc" -> [| s |] Right _ -> fail $ "Rule doesn't typecheck" Left e -> fail $ show e I don't know really why, but now it's working very well! On Sat, Feb 23, 2013 at 7:56 PM, Daniel GorĂn <jcpetru...@gmail.com> wrote: > Hi Corentin, > > I've never used TH, but from what I understand, trying to combine hint and > TH would be redundant (even if it worked): whatever String you can evaluate > using hint, you can evaluate it directly in TH. Is this not the case? > > Cheers, > Daniel > > On Feb 23, 2013, at 6:53 PM, Corentin Dupont wrote: > > > Hi Daniel, > > Did you already tried to use Hint in a QuasiQuote? This would come handy > to check at compile time the validity of some strings... > > However I have the error hereunder. > > The duplicate symbol found in the object file is in fact the first > symbol in this file. So I guess GHCi tries to load it twice... > > Best, > > Corentin > > > > > > On Sat, Feb 23, 2013 at 12:03 AM, Corentin Dupont < > corentin.dup...@gmail.com> wrote: > > 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 during 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... > > > > > > > > On Fri, Feb 22, 2013 at 11:51 PM, Corentin Dupont < > corentin.dup...@gmail.com> wrote: > > 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: > > > 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. > > > > Yes, you can: > > < > http://hackage.haskell.org/packages/archive/template-haskell/2.8.0.0/doc/html/Language-Haskell-TH.html#v:runIO > >. > > > > Francesco > > > > > > > >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe