Haskell 折叠式binarytree从未完成某些折叠式地图查询?
我试过让一棵二叉树可以折叠 这是我的二进制树:Haskell 折叠式binarytree从未完成某些折叠式地图查询?,haskell,Haskell,我试过让一棵二叉树可以折叠 这是我的二进制树: data BinaryTree2 a = Node2 a (BinaryTree2 a) (BinaryTree2 a) | Leaf2 deriving Show 然后,我尝试通过实现foldMap使其可折叠: import qualified Data.Foldable as F instance F.Foldable BinaryTree2 where foldMa
data BinaryTree2 a = Node2 a (BinaryTree2 a) (BinaryTree2 a)
| Leaf2
deriving Show
然后,我尝试通过实现foldMap使其可折叠:
import qualified Data.Foldable as F
instance F.Foldable BinaryTree2 where
foldMap f Leaf2 = mempty
foldMap f (Node2 v l r) = f v `mappend` F.foldMap f l `mappend` F.foldMap f r
上面的方法可以编译,但除非可以通过查看第一个节点来回答查询,否则不起作用
t3 = Node2 3 (Node2 1 Leaf2 Leaf2) (Node2 5 Leaf2 Leaf2)
foldMap (Any . (== 3)) t3
-- ghc output: Any {getAny = True}
foldMap (All . (== 3)) t3
-- ghc never returns: All {getAll =
我做错了什么?缩进。这很重要
instance F.Foldable BinaryTree2 where
foldMap f Leaf2 = mempty
foldMap f (Node2 v l r) = f v `mappend` F.foldMap f l `mappend` F.foldMap f r
-- ^^^^^^
你应该很困惑,你可以使用
foldMap
而不是F.foldMap
缩进。这很重要
instance F.Foldable BinaryTree2 where
foldMap f Leaf2 = mempty
foldMap f (Node2 v l r) = f v `mappend` F.foldMap f l `mappend` F.foldMap f r
-- ^^^^^^
你应该很困惑,你可以使用
foldMap
而不是F.foldMap
缩进。这很重要
instance F.Foldable BinaryTree2 where
foldMap f Leaf2 = mempty
foldMap f (Node2 v l r) = f v `mappend` F.foldMap f l `mappend` F.foldMap f r
-- ^^^^^^
你应该很困惑,你可以使用
foldMap
而不是F.foldMap
缩进。这很重要
instance F.Foldable BinaryTree2 where
foldMap f Leaf2 = mempty
foldMap f (Node2 v l r) = f v `mappend` F.foldMap f l `mappend` F.foldMap f r
-- ^^^^^^
它应该让你感到困惑,你可以使用
foldMap
而不是F.foldMap
请包括foldMap
,也可能包括treeInsert2
和preorder
@AndrásKovács Sorry;复制粘贴了错误的东西。它对我有用。是否与折叠地图的定义有重叠?也许F.foldMap也适用于你?好的,太好了。谢谢你们两位。一定是关于OSX中的ghc(试图让它运行,但它吞噬了我所有的内存)。Ps.Sassa使用F.foldMap不起作用,但谢谢。可能存在重复或其他类似的缩进问题。请包括foldMap
,也可能包括treeInsert2
和preorder
@AndrásKovács对不起;复制粘贴了错误的东西。它对我有用。是否与折叠地图的定义有重叠?也许F.foldMap也适用于你?好的,太好了。谢谢你们两位。一定是关于OSX中的ghc(试图让它运行,但它吞噬了我所有的内存)。Ps.Sassa使用F.foldMap不起作用,但谢谢。可能存在重复或其他类似的缩进问题。请包括foldMap
,也可能包括treeInsert2
和preorder
@AndrásKovács对不起;复制粘贴了错误的东西。它对我有用。是否与折叠地图的定义有重叠?也许F.foldMap也适用于你?好的,太好了。谢谢你们两位。一定是关于OSX中的ghc(试图让它运行,但它吞噬了我所有的内存)。Ps.Sassa使用F.foldMap不起作用,但谢谢。可能存在重复或其他类似的缩进问题。请包括foldMap
,也可能包括treeInsert2
和preorder
@AndrásKovács对不起;复制粘贴了错误的东西。它对我有用。是否与折叠地图的定义有重叠?也许F.foldMap也适用于你?好的,太好了。谢谢你们两位。一定是关于OSX中的ghc(试图让它运行,但它吞噬了我所有的内存)。使用F.foldMap的Ps.Sassa不起作用,但谢谢。可能是重复的问题或其他类似的缩进问题。