1

我有一个本地创作的 Haskell 项目,它同时产生:

  1. 二进制可执行文件,和
  2. 几个新的 Haskell 模块,我希望其他基于 Haskell 的可执行文件可以访问这些模块。

后:

stack build
stack install

我发现:

  1. 二进制可执行文件(上面的#1)从任何目录运行都很好。
  2. 但是,只有在我从项目目录中运行时才能找到新的 Haskell 模块(上面的#2)!(也就是说,对于上述 #1 以外的任何可执行文件。)

我需要能够从任何地方找到新模块。我怎样才能做到这一点?

4

1 回答 1

1

每个堆栈项目都在自己的沙箱中,因此编译后的模块只能在该项目中使用。编译的依赖项(来自堆栈快照)有时会在项目之间共享。

请注意,您可以在包列表中列出相对路径,并指向该包。它将再次构建,但可以通过这种方式直接在另一个项目中使用。为什么要建额外的建筑?Stack 具有与 cabal-install 不同的项目模型 - 它不允许对包 DB 进行突变来影响其他项目的构建方式。

共享此类包的一种选择是将其放在 git repo 中并使用https://docs.haskellstack.org/en/stable/custom_snapshot/,但这些东西仍然有点新。

于 2017-12-27T20:11:53.653 回答