Haskell: 如何组合标量值和一元值?
Haskell: How to combine scalar and monadic values?
目前我正在摆弄一个关于 2D ST 数组和递归的 haskell 问题。
给定一个二维位置和一个方向数组,我写了一行返回数组内所有结果点的列表:
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
| ...
目前我正在摆弄一个关于 2D ST 数组和递归的 haskell 问题。
给定一个二维位置和一个方向数组,我写了一行返回数组内所有结果点的列表:
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
| ...