代码之家  ›  专栏  ›  技术社区  ›  rtytgat

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

  •  0
  • rtytgat  · 技术社区  · 7 年前

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

    • 后端,使用 servant
    • 前端,使用 reflex , reflex-dom servant-reflex
    • 一个共享包,定义服务API,用于2和该API要使用的某些数据类型之间的通信。

    最后一个包裹给我带来了麻烦。我不知道如何构造项目,以便其他两个包可以使用它。目前我有两种选择:

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

    有没有办法让选项2起作用?还是有更好的方法?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Emanuel Borsboom    7 年前

    建议使用两个堆栈项目文件(例如。 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。