如何使用堆栈安装本地创作的Haskell模块以供全局使用?

时间:2017-12-27 15:42:24

标签: haskell cabal haskell-stack cabal-install stackage

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

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

    stack build
    stack install
    

    我发现了:

    1. 二进制可执行文件(上面的#1)可以从任何目录运行。
    2. 但是,新的Haskell模块(上面的#2)只有在我从项目目录中运行时才能找到! (也就是说,对于上面#1以外的任何可执行文件。)
    3. 我需要能够从任何地方找到新模块。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

分享这样一个软件包的一个选择是将它放在git repo中并使用https://docs.haskellstack.org/en/stable/custom_snapshot/,但这些东西仍然有点新。