如果在Haskell中我有一个元组:
x = (1, 2)
我可以使用fst x来检索1并使用snd x来检索2
我想知道,如果我有三重奏:
y = (1, 2, 3)
我可以使用类似的功能吗?
答案 0 :(得分:7)
您需要编写自己的提取函数:
extractFirst :: (a, b, c) -> a
extractFirst (a,_,_) = a
fst
和snd
函数仅适用于元组,即(a, b)
答案 1 :(得分:6)
没有内置的。如果有的话,你需要很多1of2
,2of2
,1of4
,4of7
。而不是将它们全部作为内置函数,fst
和snd
是专门定义的,对于大多数其他情况,我们使用模式匹配:
4of7 (_, _, _, x, _, _, _) = x
lens
库是一个相当流行的高级库,它通过使用聪明的类型类提供所有这些。
3of4 = view _3
4of4 = view _4
3of7 = view _3
...
但这种普遍性是以相当陡峭的复杂价格出现的。
答案 2 :(得分:3)
如前所述,方法是模式匹配。但是,为了完整起见,我想提一下你可以简单地使用lambda函数:
head $ map (\(a, b, c) -> a) (y : [])