Haskell 如何构建树中所有分支的列表?

Haskell 如何构建树中所有分支的列表?,haskell,tree,tree-traversal,Haskell,Tree,Tree Traversal,哈斯克尔的树木有问题。有一棵树: data Tree a b = Leaf a | Branch (b,Tree a b) (b,Tree a b) deriving(Eq, Show) tree = Branch ("A",Branch ("C",Leaf 3) ("D",Branch ("G",Leaf 7)

哈斯克尔的树木有问题。有一棵树:

data Tree a b = Leaf a | Branch (b,Tree a b) (b,Tree a b)
    deriving(Eq, Show)

tree = Branch 
         ("A",Branch 
                ("C",Leaf 3)
                ("D",Branch
                      ("G",Leaf 7)
                      ("H",Leaf 6)
                )
          )
          ("B",Branch
                 ("E",Leaf 5)
                 ("F",Leaf 4)
          )
我需要定义一个函数,它返回树中所有分支的列表,输出如下:
[[“a”、“C”]、[“a”、“D”、“G”]、[“a”、“D”、“H”]、[“B”、“E”]、[“B”、“F”]
。我所做的是错误的,但不知道如何修复它:

branch:: Tree a b -> [[b]]
branch (Leaf x) = []
branch (Branch (a,right) (b,left)) = ([y] ++ branch left) ++ ([b] ++ branch right)

我得到的输出是
[“A”、“C”、“D”、“G”、“H”、“B”、“E”、“F”]

我认为这样应该可以:

branch :: Tree a b -> [[b]]
branch (Leaf _) = [[]]
branch (Branch (a, right) (b, left)) = map (a :) (branch right) 
                                    ++ map (b :) (branch left)

此时,
分支
函数只返回所有节点的列表。