Haskell Repa - обход 2D-массива
Я пытаюсь проследить 2D-массив, который я создал с помощью repa, пока у меня есть функция, которая вызывается для каждого элемента, но я не понимаю, какая фундаментальная концепция существует, которая не позволяет мне выполнять выражения внутри этой функции, то, что у меня пока есть, это следующее:
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 ()
Вы можете игнорировать материал о текстурах и OpenGL, это будет игра. я получаю ошибки компиляции, когда я пытаюсь использовать функцию с побочными эффектами в функции drawTile. как мне выполнить какое-то выражение (напечатать "привет", например), где я хочу? Есть ли какой-то другой более простой способ применить функцию к каждому элементу в массиве repa?
1 ответ
Я сделал то, что предложил пользователь alec, и возвратил список операций ввода-вывода, а затем упорядочил их все вместе, используя следующую функцию:
resequence_ :: [IO ()] -> IO ()
resequence_ = foldr (>>) (return ())
Спасибо еще раз за помощь. для дальнейшего использования я ошибочно обошел IO, и проблема была не в repa.