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

Haskell编译疑问:能否用GHC编译含Fmt模块的代码?

问题解答

能否用GHC直接编译?

可以,但不能用--build-depends参数——这个参数是Cabal提供的,并非GHC原生支持的参数。

具体解决方法

方法1:直接用GHC的原生参数指定依赖

GHC本身支持-package参数来指定要链接的包,前提是fmt已经安装到你的GHC包数据库中。执行以下命令即可:

ghc -package fmt vocab3.hs

如果提示找不到包,先通过ghc-pkg list fmt确认fmt是否已安装;若未安装,先用cabal install fmt完成安装。

方法2:用Cabal管理项目编译(更稳定)

既然你偏好编译产出可执行文件,完全可以用Cabal来管理依赖并完成编译,步骤如下:

  1. 初始化Cabal项目(若还没有):
    cabal init --interactive
    
    按提示填写项目信息,在依赖项中添加fmt。
  2. 将vocab3.hs放到项目的app目录,或在生成的.cabal文件中指定可执行文件的源文件路径。
  3. 编译项目:
    cabal build
    
    编译后的可执行文件会存放在dist-newstyle目录下,也可以直接用cabal run运行程序。

问题原因解析

  • cabal repl --build-depends fmt能正常工作,是因为Cabal在启动GHCi前会处理--build-depends参数:它会自动确保依赖包已安装,再将GHC能识别的参数(比如-package fmt、库路径等)传递给GHCi,让解释器能找到Fmt模块。
  • 直接调用GHC时,GHC无法识别--build-depends,因为这个参数属于Cabal的命令行参数集,不是GHC原生支持的选项。GHC只能识别自己的专属参数,比如-package、-L(指定库路径)等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:34:54