[英]GHCI needlessly recompiles sub-package
我有一个包含子包(子包)的项目(我们称之为父项目)。 使用 emacs 的 HLS,每当我在父文件中更改导入部分子 package 的文件并尝试加载它时,GHCI 每次都会重新编译整个子包。 子包中有很多 TH 代码并且需要很长时间才能编译,当您只想检查某些东西是否有效时,这确实会干扰您的工作流程。 有任何想法吗?
我在用着
我的stack.yaml
在父 package 中:
resolver: lts-18.28
packages:
- .
- sub-package
extra-deps:
- ... (omitted)
allow-newer: true
编辑:最小示例: git repo
文件详情:
父stack.yaml
resolver: lts-18.28
packages:
- .
- child
子stack.yaml
resolver: lts-18.28
packages:
- .
父主src/Parent.hs
:
module Parent where
import Child
someFunc :: IO ()
someFunc = childFunc
子主文件child/src/Child.hs
:
module Child where
childFunc :: IO ()
childFunc = putStrLn "someFunc"
我不确定这是如何与 HLS 握手的,但是当您运行stack ghci
时,默认情况下它会将项目中所有包中的模块加载到 GHCi 中,所有这些都以解释的形式,这意味着每次 GHCi 启动时都要重新编译Child.hs
。
但是,如果您在命令行中指定父 package(此处命名为ghci-test
): stack ghci ghci-test
,它将仅从该 package 加载模块并使用child
的编译版本(如果需要,它将构建) ,在切换到 GHCi 提示之前)。
一些警告:
:l Child
将失败)。child
package 的更改不会生效。事实证明,将-fobject-code
添加到.ghci
文件会导致 ghci 创建 object 文件,这反过来又省去了每次重新编译所有内容的麻烦。 似乎-fno-code
是默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.