三重访问元素

MrD*_*MrD 7 haskell

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

x = (1, 2)
Run Code Online (Sandbox Code Playgroud)

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

我想知道,如果我有三倍:

y = (1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

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

Sib*_*ibi 7

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

extractFirst :: (a, b, c) -> a
extractFirst (a,_,_) = a
Run Code Online (Sandbox Code Playgroud)

这些fstsnd函数仅适用于元组ie(a, b)


J. *_*son 6

没有内置的.如果有,你需要一大堆人1of2,2of2,1of4,4of7.而不是将它们全部作为内置函数,fst并且snd是专门定​​义的,并且对于大多数其他情况我们使用模式匹配:

4of7 (_, _, _, x, _, _, _) = x
Run Code Online (Sandbox Code Playgroud)

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

3of4 = view _3
4of4 = view _4
3of7 = view _3
...
Run Code Online (Sandbox Code Playgroud)

但这种普遍性的复杂价格相当陡峭.