Haskell Repa-遍历二维数组

Haskell Repa-遍历二维数组,haskell,repa,Haskell,Repa,我正在尝试遍历使用repa创建的2D数组,到目前为止,我拥有在每个元素上调用的函数,但我不明白存在什么基本概念不允许我在该函数中执行表达式,到目前为止,我拥有的如下内容: drawTile ::(DIM2 -> Int) -> DIM2 -> Int drawTile f (Z :. i :. j) = do <this is where i want to do some IO> drawScene :: [GLuint] -> Array U

我正在尝试遍历使用repa创建的2D数组,到目前为止,我拥有在每个元素上调用的函数,但我不明白存在什么基本概念不允许我在该函数中执行表达式,到目前为止,我拥有的如下内容:

 drawTile ::(DIM2 -> Int) -> DIM2 -> Int
 drawTile f (Z :. i :. j) = do
   <this is where i want to do some IO>

 drawScene :: [GLuint] -> Array U DIM2 Int -> GLFW.Window -> IO()
 drawScene texs map win = do
   x <- computeP $(traverse map id drawTile)::IO (Array UDIM2 Int)
   return ()
drawTile::(DIM2->Int)->DIM2->Int
drawTile f(Z:.i:.j)=do
drawScene::[GLuint]->数组U DIM2 Int->GLFW.Window->IO()
drawScene texs map win=do

x我按照用户alec的建议做了,并返回了一个IO列表,然后使用以下函数将它们一起排序:

resequence_ :: [IO ()] -> IO ()
resequence_ = foldr (>>) (return ())

再次感谢你的帮助。作为将来的参考,我错误地传递了IO,问题不在于repa。

这种方式与
repa
的观点背道而驰(这并不是说这是不可能的)
repa
是关于在不同形状的数组上并行计算的<然而,代码>IO
本质上是顺序的。另外,
traverse
Data.Traversable.traverse
的含义并不相同。在我的实际代码中,它是Data.Array.Repa.traverse,但是谢谢,这让我有点头疼。让我知道这是否有意义,我希望在GL绘图的每一帧上进行并行化,这样,即使每一帧都是连续的,每一帧的所有单独组件的绘图都是并行的。感谢您的快速回复如果每个单独的组件都可以独立绘制,您可以尝试使
drawTile
纯,然后折叠阵列以组合纯组件,最后实际绘制到屏幕。您是说我可以事先创建纯函数,将它们组合在一起,在我打电话给他们之前他们不会执行吗?