You need to enable JavaScript to run this app. 为Haskell Stack项目添加gloss依赖后执行stack build报错无法加载Graphics.Gloss模块
优惠活动
大模型
产品
解决方案
定价
更多

为Haskell Stack项目添加gloss依赖后执行stack build报错无法加载Graphics.Gloss模块

报错成因拆解

你遇到的报错是三个配置偏差叠加导致的,逐一对应即可解决:

  • 手动修改派生cabal文件无效:你的项目是Stack默认Hpack模板生成的,根目录下的package.yaml是依赖配置的唯一源头,project39.cabal是每次构建时自动从package.yaml生成的自动派生文件,手动写入的内容会被构建流程自动覆盖,根本不会实际生效。
  • 依赖加错了组件层级:你编辑的cabal片段是可执行程序project39-exe的配置段,但实际引入Graphics.Gloss模块的src/Lib.hs属于项目的库组件(即project39本身),库组件的依赖列表里没有声明gloss,就会触发“隐藏包、模块不可见”的典型报错。
  • Stack依赖源配置未生效:你当前的stack.yaml中所有extra-deps配置行都被注释标记,Stack无法从本地解析路径识别到gloss的合法依赖版本。
修复步骤

1. 配置stack.yaml的合法依赖源

取消extra-deps段落的注释,写入gloss的版本声明,最终效果参考:

extra-deps:
  - gloss-1.13.2.1

注:如果使用当前主流的LTS Stackage快照,gloss本身已经在默认快照范围内,不需要额外添加其他传递依赖即可被解析。

2. 从配置源头package.yaml声明依赖

直接编辑根目录的package.yaml文件,不要手动修改自动生成的.cabal文件:

  • 找到库组件的配置段(对应source-dirs: src的library部分,也就是会编译src/Lib.hs的组件),在其dependencies列表中加入gloss。
  • 可执行组件的依赖只需要声明对项目本身库的依赖即可,不需要重复添加gloss。

参考调整后的package.yaml核心结构:

# 库组件(编译src目录下的Lib.hs)
library:
  source-dirs: src
  dependencies:
    - base >= 4.7 && < 5
    - gloss  # 模块引入在这里需要加依赖
# 可执行组件(编译app目录下的Main.hs)
executables:
  project39-exe:
    main: Main.hs
    source-dirs: app
    ghc-options:
      - -threaded
      - -rtsopts
      - -with-rtsopts=-N
    dependencies:
      - project39

3. 触发构建完成编译

配置完成后直接执行stack build即可,构建流程会自动根据package.yaml重新生成正确的.cabal文件、下载依赖、完成编译。如果出现系统层面的OpenGL/GLFW库缺失报错,按照对应平台的包管理提示安装系统依赖即可,和Haskell层的配置无关。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 01:45:00