三重访问元素

时间:2013-12-07 23:05:56

标签: haskell

如果在Haskell中我有一个元组:

x = (1, 2)

我可以使用fst x来检索1并使用snd x来检索2

我想知道,如果我有三重奏:

y = (1, 2, 3)

我可以使用类似的功能吗?

3 个答案:

答案 0 :(得分:7)

您需要编写自己的提取函数:

extractFirst :: (a, b, c) -> a
extractFirst (a,_,_) = a

fstsnd函数仅适用于元组,即(a, b)

答案 1 :(得分:6)

没有内置的。如果有的话,你需要很多1of22of21of44of7。而不是将它们全部作为内置函数,fstsnd是专门定义的,对于大多数其他情况,我们使用模式匹配:

4of7 (_, _, _, x, _, _, _) = x

lens库是一个相当流行的高级库,它通过使用聪明的类型类提供所有这些。

3of4 = view _3
4of4 = view _4
3of7 = view _3
...

但这种普遍性是以相当陡峭的复杂价格出现的。

答案 2 :(得分:3)

如前所述,方法是模式匹配。但是,为了完整起见,我想提一下你可以简单地使用lambda函数:

head $ map (\(a, b, c) -> a) (y : [])