Haskell 如何让GHCi重新加载并包含本地相关库中的更改?
完整的可复制项目: 我有以下定义的简单阴谋集团文件:Haskell 如何让GHCi重新加载并包含本地相关库中的更改?,haskell,cabal,ghci,Haskell,Cabal,Ghci,完整的可复制项目: 我有以下定义的简单阴谋集团文件: 库(源代码在src lib下) 同一项目中的可执行文件(源代码在src下)(取决于上述本地库) 但是,在重新加载GHCi(:r)时,它将只重新加载应用程序可执行文件中的更改,而忽略库中的任何更改 这似乎是非常有限/不正确的行为。我怎样才能解决这个问题呢?有一个解决办法,你也可以 运行cabal repl,然后:加载src/Main.hs,或 使用cabal repl app,您需要:加载src/Main.hs src lib/Hello.
- 库(源代码在
下)src lib
- 同一项目中的可执行文件(源代码在
下)(取决于上述本地库)src
:r
)时,它将只重新加载应用程序
可执行文件中的更改,而忽略库中的任何更改
这似乎是非常有限/不正确的行为。我怎样才能解决这个问题呢?有一个解决办法,你也可以
cabal repl
,然后:加载src/Main.hs
,或cabal repl app
,您需要:加载src/Main.hs src lib/Hello.hs
:重新加载
也重新加载依赖项中的更改
在第一种情况下,:load
以某种方式开始加载/遵循依赖项。(不确定为什么cabal repl app
做的不完全一样。)
在第二种情况下,您需要显式地命名要遵循的模块。此外,首先,您需要将模块放在您想要加入的名称空间中。所以:加载src/Main.hs..其他..
在reddit上看到。似乎cabal只能加载一个“单元”,但加载其他源的
:load
似乎颠覆了这一点。原因是您的库编译和依赖跟踪是由cabal
完成的,在ghci
之外。堆栈可能没有这个限制吗?
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
cabal v2-repl app