I am trying this REPA library, and i want to process an image in both ways, parallel and sequentially.
I can read the image (with other library, DevIL) and process it with computeP (parallel). Here is the code (is from a example on the wiki of haskell).
import Foreign.Ptr
import System.Environment
import Data.Word
import Data.Array.Repa hiding ((++))
import Data.Array.Repa.IO.DevIL
import Data.Array.Repa.Repr.ForeignPtr
main :: IO ()
main = do
[f] <- getArgs
(RGB v) <- runIL $ readImage f
rotated <- (computeP $ rot180 v) :: IO (Array F DIM3 Word8)
runIL $ writeImage ("flip-"++f) (RGB rotated)
rot180 :: (Source r e) => Array r DIM3 e -> Array D DIM3 e
rot180 g = backpermute e flop g
where
e@(Z :. x :. y :. _) = extent g
flop (Z :. i :. j :. k) =
(Z :. x - i - 1 :. y - j - 1 :. k)
Now i want to do it sequentially changing "computeP" with "computeS". But, when i try to compile it, this error appears:
Couldn't match expected type ‘IO (Array F DIM3 Word8)’
with actual type ‘Array r20 DIM3 Word8’
In a stmt of a 'do' block:
rotated <- (computeS $ rot180 v) :: IO (Array F DIM3 Word8)
As you can probably guess, i am new at functional programming. I dont know why this error is happening. Any help would be great.
Thanks in advance.
computeS
does not occur inIO
so you need to havelet rotated = (computeS $ rot180 v) :: Array F DIM3 Word8
instead ofrotated <- (computeP $ rot180 v) :: IO (Array F DIM3 Word8)
. – LethargycomputeP
, anyway? I can't find anything of that name in the libraries you've quoted. Please always add concrete links to tha hackage haddocks, like this:computeS
. – FuzzycomputeP
andcomputeS
are sort of at the centre of REPA. Here they are in the mainData.Array.Repa
module. – LethargycomputeP
is apparently obsolete then... – FuzzycomputeP
is obsolete, it's that repa4 is still in experimental stage and doesn't have that function. Not sure if it does computation in parallel by default or simply doesn't support it, I'll have to figure it out. – Agminate