Haskell中array包已暴露但GHC编译仍提示隐藏的问题问询
问题原因与解决方案
核心原因
GHC 9.0及以上版本对默认依赖包集合做了精简:
- 旧版GHC(8.x及更早)默认会自动包含
array、bytestring等常用非核心包到编译依赖中 - 从GHC 9.0开始,默认仅链接最基础的核心包(如
base、ghc-prim等),array这类包被移出了默认依赖集合 ghc-pkg describe array显示exposed: True仅表示该包在包数据库中是可被引用的,但GHC不会自动将所有exposed包纳入编译依赖,必须显式指定
直接使用GHC的解决方案
1. 全局持久化配置
在用户目录下创建或编辑GHC全局配置文件~/.ghc/ghc.conf,添加以下内容:
-package array
之后所有通过GHC编译的代码都会自动包含array包依赖,无需手动加参数。
2. 单项目配置
在项目根目录创建.ghc-options文件,写入:
-package array
GHC编译该项目下的代码时会自动读取这个文件的配置。
3. 临时单次编译(补充说明)
每次编译时显式指定包参数:
ghc -O2 sudoku1.hs -rtsopts -package array
适合临时测试或单文件编译场景。
额外方案(利用已安装的Cabal)
如果不想手动管理GHC参数,可初始化一个简易Cabal项目:
- 在项目目录执行
cabal init,按提示完成初始化(选择"executable"类型) - 在生成的
.cabal文件的build-depends字段中添加array,例如:build-depends: base ^>=4.17.2.1, array ^>=0.5.4.0 - 用
cabal build编译项目,Cabal会自动处理所有依赖,无需手动给GHC传参数
内容的提问来源于stack exchange,提问作者reverish
相关产品推荐
相关产品推荐

