You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell与Stack依赖疑问:需手动配置还是构建命令未获模块?

解决Haskell Stack中找不到Data.Set模块的问题

嘿,刚接触Haskell和Stack对吧?别慌,这个问题其实挺常见的——Data.Set并不在Haskell的**标准库(base)**里,它属于containers这个额外的第三方包,所以Stack默认不会自动帮你引入,这就是为啥编译时会报错,还提示你是不是指base库中的Data.Int啦。

下面咱一步步解决你的问题:

1. 要不要手动指定外部依赖?

必须要!因为Data.Set所在的containers包不属于Haskell的核心标准库(base),Stack只会自动引入base库以及项目配置中明确声明的依赖包,所以得手动把containers加到你的依赖列表里。

2. 优先选择.cabal还是package.yaml?

现在Stack项目更推荐用package.yaml——它的语法更简洁易读,对新手友好,而且Stack会自动根据package.yaml生成/同步对应的.cabal文件。如果你是用stack new创建的新项目,默认就会有package.yaml,优先用它就好。

当然,直接修改.cabal文件也没问题,两种方式最终效果一致,只是package.yaml维护起来更省心。

3. 正确的配置方式

方式一:修改package.yaml

打开项目根目录下的package.yaml,找到dependencies部分,把containers加进去:

dependencies:
- base >= 4.14 && < 5  # 这是默认的base库依赖
- containers           # 新增这一行

方式二:修改.cabal文件

如果你的项目只有.cabal文件(比如老项目),打开它找到build-depends字段,添加containers:

build-depends:
    base >=4.14 && <5,  # 原有base依赖
    containers          # 新增这一行

4. 完成配置后怎么做?

保存配置文件后,在终端运行:

stack build

Stack会自动从Hackage仓库下载containers包,编译并缓存它,之后你就能正常导入Data.Set模块啦。

内容的提问来源于stack exchange,提问作者Zazaeil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:36:29