在一个项目中,我可以编译一个模块并在 ghci 中以交互方式加载已编译的模块吗?

within a project can I compile a module and interactively load the compiled module within ghci?

通常在 Haskell 项目中,我要么与 ghci 交互工作,要么使用 cabal build 编译整个项目。

但是,在某些用例中,我可能有一个计算密集型例程以及一些更高级别的脚本功能,比如选择分析算法的输入。

是否可以使用 GHCi + GHC,以便我编译计算密集型模块,将编译后的代码加载到重新运行,使用来自 GHCi 的不同输入?

是的,您可以在ghci中加载已编译的模块;如果有一个适当命名的 .hi.o 文件,ghci 将使用它们而不是解释相应 .hs 文件中的代码。然后您将只能访问从该模块导出的操作。

如果你发现自己使用的是编译加载模块,而你想要的是解释模块,你可以 :load *foo.hs 指示 ghci 忽略编译版本并解释 foo.hs.