我有一个([(Int, Int, Int)], Int, Int)
形式的值
我需要一个函数,该函数将以([(Int, Int, Int)], Int, Int)
的形式获取数据并返回[[(Int, Int, Int)]]
因此,假设我的列表名为it
。
当我运行fst it
我收到此错误
* Couldn't match expected type `(a, b0)'
with actual type `([(Int, Int, Int)], Int, Int)'
* In the first argument of `fst', namely `it'
In the expression: fst it
In an equation for `it': it = fst it
* Relevant bindings include it :: a (bound at <interactive>:9:1)
我无法理解自己在做什么。有人可以帮我吗。我想获取it
的第一个值,它是列表的列表。
答案 0 :(得分:4)
像签名指定的那样,fst :: (a, b) -> a
返回 2 元组的 first 项。所以不是3元组(或任何 n 元组,其中 n≠2 )。
对于三元组(及更高版本),通常使用模式匹配(例如在lambda表达式中)。例如:
\(x, _, _) -> x
是lambda表达式,它获得3元组的第一项。
或者您可以定义执行此模式匹配的函数,例如:
fst3 :: (a, b, c) -> a
fst3 (x, _, _) = x