作为" Wat"对于Haskell,它在haskell for teaching的末尾指出了
length (1,2)
1
VS
length (1,2,3)
<loads of error messages>
问题是为什么?以及如何纠正这个问题?
答案 0 :(得分:3)
length
的类型是:
Foldable t => t a -> Int
您可以将其视为在a
的某些集合中返回a
的数量。有Foldable
instance for pairs:
instance Foldable ((,) a) where
foldMap f (_, y) = f y
foldr f z (_, y) = f y z
作用于该对的第二个元素,您可以使用toList
:
toList (1,2)
> [2]
由于较大的元组没有Foldable
个实例,因此在尝试评估length (1,2,3)
时会收到错误。
答案 1 :(得分:0)
这背后的想法是带有2个元素的元组实现了Foldable
类型类,但更高阶的元组不会实现它。