从 Haskell 元组获取第一个值时遇到问题

use*_*517 2 haskell functional-programming

我有一个以下形式的值([(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)
Run Code Online (Sandbox Code Playgroud)

我很难理解我做错了什么。有人可以帮我吗。我想获取it其中的第一个值是列表的列表。

Wil*_*sem 7

就像签名指定的那样,fst :: (a, b) -> a返回2元组的第一项。所以不是 3 元组(或任何n ≠ 2的n元组)。

对于 3 元组(及更高元组),通常使用模式匹配(例如在 lambda 表达式中)。例如:

\(x, _, _) -> x
Run Code Online (Sandbox Code Playgroud)

是获取 3 元组第一项的 lambda 表达式。

或者您可以定义一个执行此模式匹配的函数,例如:

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