2017-08-20 60 views
0

为什么验证码:无法构造无限类型:E〜[E]

a=array ((0,0),(5,5)) [((i,j),x) | i <- [0..5], j <- [0..5], x <- a!(i,j)] 

原因错误cannot construct the infinite type: e ~ [e], 但如果重写它是这样的:

a=array ((0,0),(5,5)) [((i,j),a!(i,j)) | i <- [0..5], j <- [0..5]] 

能正常工作?

+0

我想大家都知道,最后的定义填充与非终止计算阵列,但我想指出这一点,以防万一。 – chi

+0

@chi,这只是最简单的问题,谢谢 – Shadasviar

回答

5

在列表理解中,<-的右侧是列表从中取元素。但是你可以使用let表达式:

[ ... | ..., let x = a ! (i,j) ]