我如何为这个特殊的结构实现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接受ab,但我必须将f应用于TwoValueList中的两个a,并以某种方式将它们组合在一起。我是否遗漏了一些其他类型的约束?

谢谢。

转载请注明出处:http://www.intsu.net/article/20230503/1933203.html