我不明白为什么这不起作用。 我的数据类型如下:
data IndexedTree a = Leaf [a] | Node [(IndexedTree a, a)]
first (x, _ ) = x
test :: IndexedTree a -> Bool
test (Leaf x) = True
test (Node (x:xs)) = test first(x)
收益率
Could not match expected type IndexedTree a0
with actual type (t0,t1)-> t0
在最后一个LOC中。 我不明白为什么会这样,以及如何避免这种情况。
答案 0 :(得分:4)
您对test
的定义应为:
test :: IndexedTree a -> Bool
test (Leaf x) = True
test (Node (x:xs)) = test (first x)
first (x)
与first x
相同,因为函数应用程序与左侧相关联
test first (x)
被解析为
(test first) x
test
需要IndexedTree a
参数,但first
的类型为(a, b) -> a
,因此错误。
您还应该处理节点列表为空的情况。
答案 1 :(得分:1)
first(x)
与first (x)
相同,与first x
相同。因此test first(x)
只是test first x
,test
只需要一个参数。
如果您想首先评估first x
:
test (Node (x:xs)) = test $ first x