1
나는 repa를 사용하여 만든 2D 배열을 탐색하려고하는데, 지금까지는 모든 요소에 대해 호출되는 함수가 있지만 표현을 실행하지 않는 기본 개념이 무엇인지 이해하지 못합니다. 다음과 같이 그 함수 안에, 내가 지금까지 가지고하는 것은 :Haskell 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()
당신은 텍스처와 OpenGL에 대한 물건을 무시할 수 있습니다,이 게임이 될 것입니다. tryTile 함수에서 부작용이있는 함수를 사용하려고하면 컴파일 오류가 발생합니다. 내가 원하는 곳에서 어떻게 표현 (print "hello")을 할 수 있을까? repa 배열의 각 요소에 함수를 적용하는 좀 더 쉬운 방법이 있습니까?
이런 종류의 것은 'repa'의 요점에 반하는 것입니다.하지만 이것은 불가능합니다. 'repa'는 다른 모양의 배열에 대한 계산을 병렬 처리하는 것에 관한 것입니다. 그러나 'IO'는 사실 순차적이다. 또한'트래버스 '는'Data.Traversable.traverse'와 같은 것을 의미하지는 않습니다 ... – Alec
내 실제 코드에 Data.Array.Repa.traverse라고 쓰여 있지만 감사합니다. 이것이 합리적이라면 GL 그리기의 각 프레임에서 병렬 처리가 필요하므로 각 프레임이 순차적이라고 생각하더라도 각 프레임의 모든 개별 구성 요소의 도면이 서로 평행하다는 것을 알 수 있습니다. 빠른 답장을 보내 주셔서 감사합니다 –
개별 구성 요소 각각을 독립적으로 그릴 수 있다면'drawTile'을 순수하게 만들고 배열을 접어 순수한 구성 요소를 결합한 다음 실제로 화면에 그릴 수 있습니다. – Alec