如何用Language.Haskell.Interpreter发布可执行文件?

我希望能够使用hint来embedded一个Haskell解释器,这样我就可以在Haskell中编写插件来与我的程序一起使用。 我不想为我的可执行文件运送该死的Haskell平台。 通常,Haskell可执行文件是相当独立的。 例如,擦除PATH不会导致问题:

 $ PATH=. Hello Hello world 

但是,如果我擦除PATH使用runInterpreter炸弹一个简单的testing程序:

 $ PATH=. TryHint GhcException "panic! (the 'impossible' happened)\n (GHC version 7.8.3 for x86_64-apple-darwin):\n\tDynamic linker not initialised\n\nPlease report this as a GHC bug: http://www.haskell.org/ghc/reportabug\n" 

它需要什么样的库或可执行文件才能运行?

otool并没有给出太多指导:

 otool -L TryHint TryHint: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0) /usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0) /usr/local/lib/libgmp.10.dylib (compatibility version 13.0.0, current version 13.0.0) 

TryHint的testing代码没有太多的作用:

 import Control.Monad import Language.Haskell.Interpreter main = do f <- runInterpreter $ loadModules ["Test"] >> setTopLevelModules ["Test"] >> interpret "f" (as :: Int -> Int) case f of Left e -> print e Right r -> mapM_ (print . r) [1..10] 

它只是将f绑定到Test.hs的函数,以便在运行时进行解释。 Test.hs看起来像这样:

 module Test where f :: Int -> Int fx = x + 1 

使用Language.Haskell.Interpreter发送可执行文件似乎与您所显示的方式一致。 您必须将您的PATH设置为您要执行的脚本。

另外,正如注释中的@bennofs所提到的,静态链接GHC API不能与GHC 7.8中引入的新dynamic链接器(交互式代码执行现在需要dynamic库)一起工作。