此数据类型的可折叠实例是什么样的?
data X t = X t [X t]
我试过了:
instance Foldable X where
foldMap f (X x xs) = f x `mappend` foldMap f xs
但得到了这个错误:
Occurs check: cannot construct the infinite type: a = X a
When generalising the type(s) for `foldMap'
In the instance declaration for `Foldable X'
答案 0 :(得分:6)
xs
是一个项目列表,foldMap
需要应用于各个项目,而不是列表本身。使用map
执行此操作会提供可与mconcat
结合使用的结果列表:
instance Foldable X where
foldMap f (X x xs) = f x `mappend` mconcat (map (foldMap f) xs)