数组 – Haskell:如何结合标量和monadic值?

目前我正在摆弄有关2D ST阵列和递归的
haskell问题.

给定一个2D位置和一个方向数组,我写了一行返回数组中所有结果点的列表:

let cellsAround = [resPt | dir <- directions,
                         let resPt = (fst dir + fst point, snd dir + snd point),
                         fst resPt >= 0 && fst resPt <= fst maxIdx &&
                         snd resPt >= 0 && snd resPt <= snd maxIdx]

现在的目标是使用数组的内容丰富结果列表项,我尝试了这个:

cellsAround <- sequence [readArray board resPt | dir <- directions,
                         let resPt = (fst dir + fst point, snd dir + snd point),
                         fst resPt >= 0 && fst resPt <= fst maxIdx &&
                         snd resPt >= 0 && snd resPt <= snd maxIdx]

这也很有效.但目标是获得[(Point,Int)]的组合,因为我必须过滤数组内容.

任何想法如何将此结合起来,比方说

(resPt, readArray board resPt)

最佳答案 最小的变化:

sequence [(,) resPt <$> readArray board resPt
         | ...
点赞