如何从 Haskell Stack 构建编译可执行文件?

Cad*_*yOG 5 executable haskell compilation haskell-stack

|-aseCswk2
  |-app
    |-Main.hs
  |-src
    |-Libs.hs
  |-test
    |-Spec.hs
  |-aseCswk2.cabal
  |-Setup.hs
  |-package.yaml
...
Run Code Online (Sandbox Code Playgroud)

所以我有一个 Haskell 项目,它使用 Stack 构建系统,并如上面的示例所示。如果我使用$ stack test,那么我的 Libs.hs 文件中的函数将使用 Spec.hs 文件中的案例进行测试。如果我使用$ stack build,那么我的文件会成功构建,并且我可以使用里面的功能$ stack ghci

但是,我想创建 Main.hs 文件的可执行文件,但不知道这是如何实现的。我尝试$ ghc Main.hs在应用程序目录中使用它进行编译,但收到错误消息“无法加载 Lib 的接口”,即使我已将其作为导入包含在内。我也尝试过$stack build aseCswk2:exe:aseCswk2-exe,但没有.o创建可运行的文件。

Wil*_*sem 5

Haskell-stack 在隐藏目录中构建可执行文件.stack-work。您可以找到stack使用以下命令的二进制文件所在的位置:

$ stack path --local-install-root
/haskell/app/.stack-work/install/x86_64-linux/3fa5b3c3fbcd473981eef72c68d572129654cbb7c23af146b50d90e29c41b62f/8.6.5
Run Code Online (Sandbox Code Playgroud)

如果您构建应用程序,则在此目录中存在bin/已构建的二进制文件所在的目录。

您还可以使用以下命令运行应用程序:

$ stack run
Run Code Online (Sandbox Code Playgroud)