使程序取决于解释器lib可移植

时间:2014-02-04 12:01:48

标签: haskell runtime interpreter

使用“提示”库来考虑这个简单的程序:

import qualified Language.Haskell.Interpreter as Hint

main :: IO ()
main = Hint.runInterpreter interpreter >>= print

interpreter :: Hint.Interpreter Int
interpreter = do
  Hint.setImports ["Prelude"]
  Hint.interpret "2 + 3" 0

您可以看到,为了能够在解释的代码中使用+函数,我需要解释器导入Prelude模块。据我所知,解释器从位于本地存储库中的“基础”库中导入它,所以如果这个可执行文件在没有Haskell平台但没有本地存储库的机器上运行,我希望它会抛出一些运行时异常。

如果我的假设正确,是否有解决方案或解决方法,这将使该程序可移植?事实上,我正在寻找解释任意代码的通用解决方案,不一定只依赖于“基础”包的模块,也需要导入项目模块的能力。

1 个答案:

答案 0 :(得分:1)

看起来这是不可能的。在没有Haskell的Linux机器上运行已编译的程序失败,并显示以下消息:

/usr/lib/ghc/settings: openFile: does not exist (No such file or directory)

因此,解释器库明确依赖于本地GHC。