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

at.*_*at. 3 purescript

有没有办法在PureScript中模拟未知长度的匹配数组?作为一个例子,这是我如何List在Haskell中使用它:

addFirstTwo :: (Num a) => [a] -> a
addFirstTwo (x:y:_) = x + y
Run Code Online (Sandbox Code Playgroud)

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

运算符Data.Array.(:)不能在模式中使用,因为它是函数Data.Array.cons的别名.只能在模式中使用数据构造函数的别名.

我知道我可以List在PureScript中使用s而不是Arrays,但我想将模式与数组匹配.在阅读PureScript by ExampleArray模式匹配部分后,我没有看到如何执行此操作.

rig*_*old 11

数组缺点模式早已从语言中删除.您可以改为使用unconsfrom Data.Array,如下所示:

case uncons xs of
  Just {head: x, tail} ->
    case uncons tail of
      Just {head: y, tail: _} -> x + y
      Nothing -> 0
  Nothing -> 0
Run Code Online (Sandbox Code Playgroud)

但要注意的是unconsΘ(N) .

或者您可以使用takeData.Array:

case take 2 xs of
  [a, b] -> a + b
  _ -> 0
Run Code Online (Sandbox Code Playgroud)

takeΘ(分钟(N,M)) (在这种情况下M = 2).

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

case xs !! 0, xs !! 1 of
  Just x, Just y -> x + y
  _, _ -> 0
Run Code Online (Sandbox Code Playgroud)

通常,列表比数组更令人愉快.