如何使用堆栈处理单个文件?

How to work with single file using stack?

当我使用单个文件 haskell 代码时,没有项目,我只能依赖 base 包并导入它的模块,但是当我想从其他包导入模块时,我必须创建一个新项目并编辑它的 package.yaml 并将项目添加到 dependencies,这些工作对于单个文件来说太重了。

我能否将我最常用的 dependencies 列表放到某个地方,以便当我通过 stack exec -- ghci my-file.hs 加载单个文件时它会正确找到我导入的模块?

有几个选项:

  • The --package flag,用于临时调用;

  • The global project (see also this answer),默认配置位于 ~/.stack/global-project/stack.yaml(或 OS 的相应路径),在实际项目之外工作时会启动;和

  • Stack scripts,相当于在源文件顶部放置一个 header 指定 Stack 调用,如本例取自文档...

    #!/usr/bin/env stack
    {- stack
      script
      --resolver lts-6.25
      --package turtle
      --package "stm async"
      --package http-client,http-conduit
    -}
    

    ...当你想要一些便携的东西时,这很有用。