具有List / Tuple构造的自定义数据类型中的Haskell类型匹配错误

时间:2014-05-06 21:26:57

标签: haskell custom-data-type

我不明白为什么这不起作用。 我的数据类型如下:

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中。 我不明白为什么会这样,以及如何避免这种情况。

2 个答案:

答案 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 xtest只需要一个参数。

如果您想首先评估first x

test (Node (x:xs)) = test $ first x