我如何为这个特殊的结构实现foldr?
我正在学习Haskell。我有一个列表,看起来像这样:
data TwoValueList a = Empty | Node a a (TwoValueList a)
我希望创建这个Foldable
,这样我就可以进行如下计算:
sum (Node 0 1 (Node 2 3 Empty)) --should produce 6
如果只有一个值,那就很简单了:
data OneValueList = Empty | Node a (OneValueList a)
instance Foldable OneValueList where
foldr f b Empty = b
foldr f b (Node a rest) = f a (foldr f b rest)
但是,如果一个节点中有两个值,我就无法确定类型,因为f
接受a
和b
,但我必须将f
应用于TwoValueList
中的两个a
,并以某种方式将它们组合在一起。我是否遗漏了一些其他类型的约束?
谢谢。
转载请注明出处:http://www.intsu.net/article/20230503/1933203.html