如果在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)
我可以使用类似的功能吗?
您需要编写自己的提取函数:
extractFirst :: (a, b, c) -> a
extractFirst (a,_,_) = a
Run Code Online (Sandbox Code Playgroud)
这些fst和snd函数仅适用于元组ie(a, b)
没有内置的.如果有,你需要一大堆人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)
但这种普遍性的复杂价格相当陡峭.