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
    下)(取决于上述本地库)
但是,在重新加载GHCi(
: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