问题描述
此处完整的可复制项目:https://github.com/chrissound/215
我有以下定义的简单文件:
- 一个库(源在
src-lib
下)
同一项目(取决于以上本地库)中的 - 可执行文件(在
src
下可运行)
cabal-version: 1.12
name: HaskellNixCabalStarter
version: 0.1.0.0
author: HaskellNixCabalStarter
maintainer: HaskellNixCabalStarter
license: MIT
build-type: Simple
library
exposed-modules:
Hello
other-modules:
Paths_HaskellNixCabalStarter
hs-source-dirs:
src-lib
build-depends:
base >=4.12 && <4.13
default-language: Haskell2010
executable app
main-is: Main.hs
other-modules:
Paths_HaskellNixCabalStarter
hs-source-dirs:
src
build-depends:
HaskellNixCabalStarter,base >=4.12 && <4.13
default-language: Haskell2010
我可以通过以下方式打开GHCi代表:
cabal v2-repl app
但是,在重新加载GHCi(:r
)时,它只会重新加载app
可执行文件中的更改,而忽略库中的任何更改。
这似乎是非常有限的/错误的行为。如何解决此问题/解决方法?
解决方法
有一种解决方法,您要么
- 先运行
cabal repl
,然后再运行:load src/Main.hs
,或者 - 使用
cabal repl app
,您需要:load src/Main.hs src-lib/Hello.hs
。
现在:reload
还会从依赖项中重新加载更改。
在第一种情况下,:load
也会以某种方式开始加载/遵循依赖关系。 (不确定cabal repl app
为什么做的不完全一样。)
在第二种情况下,您需要显式命名要遵循的模块。另外,首先,您需要将模块包含在您想成为谁的名称空间中。所以:load src/Main.hs ..others..
。
请参阅this的reddit。看来,阴谋集团只能装载一个“单位”,但是用:load
装载其他来源似乎可以颠覆这一点。