如何索引purescript中由数组组成的数组中的元素?

时间:2018-01-18 06:20:51

标签: purescript

  

a = [1,2,3]   一个   [1,2,3]

     

b = [3,4,5]   b   [3,4,5]

     

c = [a,b]   C   [[1,2,3],[3,4,5]]

     一个!! 2   (只是3)

     一个!! 2   (只是3)

     一个!! 1   (只是2)

     

c !! 2   没有

     

c !! 1   (只是[3,4,5])

     

c !! 1 !! 0   发现错误:   在模块$ PSCI中   在第1行,第1栏 - 第1行,第11栏

无法匹配类型

Maybe

类型

Array

尝试匹配类型时Maybe(Array Int)   类型为Array t0 同时检查表达式(索引c)1   类型为Array t0 在价值声明中

其中t0是未知类型

1 个答案:

答案 0 :(得分:4)

索引到数组不返回plain元素,而是返回Maybe中包含的值,因为数组可能没有给定索引处的元素。在您的情况下,c !! 1的结果类型为Maybe (Array Int)。所以你必须以某种方式处理Maybe

我猜您希望最终结果是Maybe Int类型。有不同的方法可以做到这一点。也许最明确的一个是:

case c !! 1 of
  Nothing  -> Nothing
  (Just x) -> x !! 0

(这将返回Just 3

因为"链接"这样的函数非常常见,有些抽象会导致相同的结果,例如:

(c !! 1) >>= (_ !! 0)

无论如何,诀窍是达到第一个结果(如果成功),然后尝试第二个索引。如果两者都成功,则返回最终结果。如果失败,请返回Nothing