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是未知类型
答案 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
。