连接三元树中的列表

oad*_*ams 1 haskell

我正在使用累加器创建一个连接列表的三元树的函数.

 19 data Ttree t = Nil | Node3 t (Ttree t) (Ttree t) (Ttree t)
 20 
 21 acc :: Ttree [a] -> [a]
 22 acc tree = acc' tree []
 23 
 24 acc' :: Ttree [a] -> [a] -> [a]
 25 acc' Nil rest = rest
 26 acc' (Node3 xs l m r) rest =
 27     xs $ acc' l $ acc' m $ acc' r rest
Run Code Online (Sandbox Code Playgroud)

我使用ghc得到了这个错误.但我不知道xs的预期类型是如何 - > b:

e6.hs:26:4:
    Couldn't match expected type `a -> b' against inferred type `[a1]'
    In the first argument of `($)', namely `xs'
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 6

左侧($)必须是一个功能(即类型a -> b),xs显然不是.记住($)is 的定义

f $ x = f x
Run Code Online (Sandbox Code Playgroud)

它一般不是括号的替代.可能你想要的

acc' (Node3 xs l m r) rest = xs ++ (acc' l . acc' m . acc' r) rest
Run Code Online (Sandbox Code Playgroud)

代替.

(注意,这不是尾递归.)