PureScript - 未知长度的模式匹配数组

PureScript - Pattern match arrays of unknown length

有没有办法在 PureScript 中模式匹配未知长度的数组?例如,这是我如何使用 Haskell 中的 List:

addFirstTwo :: (Num a) => [a] -> a
addFirstTwo (x:y:_) = x + y

我在 PureScript 中尝试了类似的操作(使用 Array a 而不是 [a]),但出现以下错误:

Operator Data.Array.(:) cannot be used in a pattern as it is an alias for function Data.Array.cons. Only aliases for data constructors may be used in patterns.

我知道我可以在 PureScript 中使用 Lists 而不是数组,但我想与数组进行模式匹配。阅读 Array pattern matching section of PureScript by Example.

后,我没有看到如何执行此操作

数组缺点模式很久以前就从语言中删除了。您可以改用 Data.Array 中的 uncons,如下所示:

case uncons xs of
  Just {head: x, tail} ->
    case uncons tail of
      Just {head: y, tail: _} -> x + y
      Nothing -> 0
  Nothing -> 0

但要注意 unconsΘ(n).

或者您可以使用 take 来自 Data.Array:

case take 2 xs of
  [a, b] -> a + b
  _ -> 0

takeΘ(min(n, m))(在本例中 m = 2)。

甚至 (!!) 来自 Data.Array:

case xs !! 0, xs !! 1 of
  Just x, Just y -> x + y
  _, _ -> 0

一般来说,列表比数组更易于使用。