外部依赖项,Haskell,堆栈:我应该修改一些东西还是 'import' 应该就足够了?

External dependencies, Haskell, stack: should I modify something or 'import' suppose to be sufficient?

我对 Haskell 和堆栈都很陌生。

import Data.Set
import Data.Stack

以上语句触发编译错误:Could not find module 'Data.Set'. Perhaps you meant 'Data.Int'。我尝试 google 并没有发现类似的东西。

因此,我的问题是:我需要手动指定外部依赖项还是只需要我的 stack build 命令,为什么无法从缓存或存储库中获取适当的模块?

如果我必须手动指定依赖项,我应该选择 .cabal 还是 .yaml?处理版本控制的正确方法是什么?

[Do] I need to specify external dependencies manually [...]?

是的。

由于您使用的是 Stack,因此很容易在代码中指定您导入的依赖包。根据您的 Stack 版本,默认配置可能会略有不同:

  1. 如果您使用最新版本的 Stack 创建项目,您将在项目的根目录中看到 package.yaml(在这种情况下使用 hpack 来指定配置)。您需要在那里添加包依赖项,例如 containers for Data.Set。这是我的一个项目中的依赖项部分的示例:

    dependencies:
    - base >= 4.7 && < 5
    - containers
    - time
    - network
    - bytestring
    
  2. 如果您使用的是旧版本的 stack 并且没有看到 package.yaml,您需要编辑 your-project-name.cabal 以添加依赖项。这是告诉您如何操作的完整文档:https://docs.haskellstack.org/en/stable/GUIDE/#adding-dependencies

就我个人而言,我更喜欢hpack (package.yaml) 的新系统。基本上,它更简单,并且可以节省您声明所有模块的时间(与依赖无关)。如果你有package.yaml,不要编辑.cabal,它是由hpack自动生成的。