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不起作用,但谢谢。可能是重复的问题或其他类似的缩进问题。