如何在本地从属库中重新加载GHCi,包括更改?

问题描述

此处完整的可复制项目: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可执行文件中的更改,而忽略库中的任何更改。

这似乎是非常有限的/错误的行为。如何解决此问题/解决方法?

解决方法

有一种解决方法,您要么

  1. 先运行cabal repl,然后再运行:load src/Main.hs,或者
  2. 使用cabal repl app,您需要:load src/Main.hs src-lib/Hello.hs

现在:reload还会从依赖项中重新加载更改。

在第一种情况下,:load也会以某种方式开始加载/遵循依赖关系。 (不确定cabal repl app为什么做的不完全一样。)

在第二种情况下,您需要显式命名要遵循的模块。另外,首先,您需要将模块包含在您想成为谁的名称空间中。所以:load src/Main.hs ..others..

请参阅this的reddit。看来,阴谋集团只能装载一个“单位”,但是用:load装载其他来源似乎可以颠覆这一点。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...