Haskell运行HTTP GET示例找不到Network.HTTP模块、cabal检测不到GHC怎么办
问题原因
Could not find module 'Network.HTTP'报错是因为依赖包选择错误:Network.HTTP属于名为HTTP的第三方包,你执行安装的network是Haskell底层网络基础库,仅包含socket等低层接口,不包含HTTP相关高层封装,就算安装成功也无法解决模块找不到的问题。- cabal提示找不到符合版本要求的ghc,是因为cabal运行时的环境变量和当前shell的环境变量不一致,常见于使用ghcup做多版本ghc管理、开发容器/虚拟环境的场景,cabal没有读取到你当前激活的ghc安装路径。
解决方案
推荐优先使用项目级依赖配置,避免全局安装依赖污染本地环境,这也是Haskell生态的标准实践:
- 打开项目根目录下和项目同名的
.cabal配置文件(你当前场景下应为api-exercises.cabal),找到可执行程序对应的build-depends配置段,添加HTTP包依赖:
executable api-exercises main-is: Main.hs other-modules: Lib build-depends: base >=4.14 && <5, HTTP >= 4000.3.0, api-exercises default-language: Haskell2010
- 执行
cabal update更新本地的包索引列表 - 执行
cabal build编译项目,cabal会自动匹配你本地的ghc版本下载对应依赖,无需手动全局安装。
如果需要单独修复cabal找不到ghc的问题,可以按以下步骤操作:
- 执行
which ghc获取当前ghc的绝对安装路径 - 执行cabal命令时手动指定ghc路径即可:
cabal install --lib HTTP --with-ghc=<替换为上一步输出的ghc绝对路径>
内容的提问来源于stack exchange,提问作者Poperton
相关产品推荐
相关产品推荐

