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

为RoseTree编写Functor实例时fmap定义类型报错求助

错误原因

你写的代码中,children 是 [Rose a] 类型的子树列表,你直接对其调用 fmap f 存在类型不匹配问题:
这里外层的 fmap 是列表类型的Functor实例方法,要求传入的参数函数可以处理列表的元素类型(也就是 Rose a),但你传入的 f 类型是 a -> b,只能处理节点存储的值,无法处理 Rose a 类型的子树。

修正后的代码
instance Functor Rose where
  fmap f (MkRose a children) = MkRose (f a) (fmap (fmap f) children)
代码逻辑说明
  • 直接用 f a 处理当前Rose树的根节点值,这部分逻辑你原来的写法是正确的。
  • 对子树列表 children 做映射时,外层的 fmap 是列表的Functor方法,用来遍历所有子树。
  • 传入列表fmap的参数是 fmap f,也就是Rose类型自身的Functor映射方法,递归将函数 f 应用到每一棵子Rose树上,完成整棵树的映射。

内容的提问来源于stack exchange,提问作者Ukiyo-e

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:54:00