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

如何设置Cabal模块搜索路径以识别本地安装的新版network包

问题1:Cabal无法识别本地已安装的新版network包的解决方法
  • 首先补装新版network为共享库,之前安装时如果没有加--lib参数,Cabal不会将其暴露给其他项目作为依赖库使用,执行命令:
    cabal install --lib network-3.1.2.5
    
  • 在Monky项目根目录新建cabal.project文件(如果已有则直接修改),添加以下内容强制指定network版本约束:
    packages: .
    constraints: network >=3.1.1
    
  • 编译项目时添加参数禁用系统全局包优先,避免优先调用Gentoo系统安装的旧版network:
    cabal build --package-env=default --no-global-packages
    
  • 验证配置生效:在项目根目录执行cabal list --installed --project-file=cabal.project network,可看到3.1.2.5版本已经出现在已安装列表中。
问题2:修改条件编译代码后的类型报错解决方法

报错的原因是旧版network 3.0.1.1中fdSocket本身的返回类型就是IO Foreign.C.Types.CInt,你写的pure . Fd $ fdSocket s相当于给已经是IO类型的返回值额外套了一层pure,导致类型变为IO (IO Foreign.C.Types.CInt),和预期的IO Fd不匹配。

直接修改条件分支代码为以下内容即可:

#if MIN_VERSION_network(3,1,1)
  Fd <$> unsafeFdSocket s
#else
  Fd <$> fdSocket s
#endif

两个分支的返回类型统一为IO Fd,即可正常编译。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:09