Haskell长度函数错误消息

时间:2017-11-19 14:53:57

标签: haskell

作为" Wat"对于Haskell,它在haskell for teaching的末尾指出了

length (1,2)

1

VS

length (1,2,3)


<loads of error messages>

问题是为什么?以及如何纠正这个问题?

2 个答案:

答案 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类型类,但更高阶的元组不会实现它。