在 Haskell 堆栈中为 1 个包设置编译器

Set compiler for 1 package in Haskell Stack

我正在尝试完全使用 Haskell 编写一个小型 Web 应用程序。我有 3 个逻辑包:

最后一个包裹给我带来了麻烦。我不知道如何构建项目以便其他 2 个包可以使用它。我现在看到 2 个选项:

  1. 每个包都有自己的堆栈文件和 git 存储库。使用 extra-deps git link 导入共享包。这种方法的问题在于它意味着我必须将对共享包的任何更改推送到 GitHub,然后才能使用其他包对其进行测试。此外,我必须单独构建所有内容。
  2. 使用单个存储库和单个 stack.yml 文件。我更喜欢这个,因为它把所有东西放在一起,还确保所有包都使用相同的解析器。在这种情况下,我会在 packages: 选项中列出所有包。但是,客户端需要使用 GHCJS 而不是 GHC 进行编译,而且我在文档中没有看到针对 1 个特定包覆盖编译器的选项。

有没有办法使选项 2 起作用?或者有更好的方法吗?

推荐的方法是有两个堆栈项目文件(例如 stack-frontend.yaml 使用 GHCJS 和 stack-backend.yaml 使用 GHC),然后使用 --stack-yaml 参数在它们之间切换(例如使用 stack --stack-yaml=stack-frontend.yaml build 构建前端,使用 stack --stack-yaml=stack-backend.yaml build 构建后端)。两个 stack-*.yaml 文件都可以包含共享仆人 API.