无法从Haskell元组获取第一个价值

时间:2018-10-02 20:13:52

标签: 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)

我无法理解自己在做什么。有人可以帮我吗。我想获取it的第一个值,它是列表的列表。

1 个答案:

答案 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