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

已导入transformers包,为何仍出现hoistMaybe未在作用域的编译错误?

解决hoistMaybe不在作用域的问题

问题根源

你碰到的问题是因为GHC 9.4.2自带的transformers版本低于0.6.0.3,而hoistMaybe是transformers 0.6.0.3版本才新增的函数。虽然你在Cabal里声明了transformers依赖,但没指定版本,Cabal会默认用GHC捆绑的旧版本(GHC 9.4.2捆绑的transformers是0.6.0.1),自然找不到这个函数。

两种解决办法

办法一:升级transformers版本

  1. 修改Cabal文件,明确指定transformers的最低版本:
cabal-version: 3.0
build-depends: base
             , transformers >= 0.6.0.3
  1. 重新构建项目:
cabal build

Cabal会自动拉取符合版本要求的transformers包,之后编译就能找到hoistMaybe了。

办法二:手动实现hoistMaybe

如果不想升级依赖,直接在你的模块里添加这段代码就行——hoistMaybe的逻辑本身很简单:

hoistMaybe :: Maybe a -> MaybeT m a
hoistMaybe = MaybeT . pure

添加后就能直接用,效果和官方实现完全一致。

验证示例

修改后可以用这段代码测试是否正常工作:

main :: IO ()
main = void $ runMaybeT $ do
  x <- hoistMaybe (Just 5) :: MaybeT IO Int
  print x

运行后会输出5,说明功能正常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:00:56