我正在尝试这个REPA库,我想以并行和顺序两种方式处理图像。
我可以读取图像(使用其他库,DevIL)并使用computeP(并行)处理它。这是代码(来自haskell wiki上的一个示例)。
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)
现在我想用"computeS"顺序改变"computeP " 。但是,当我尝试编译它时,会出现此错误:
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)
正如您可能猜到的,我是函数式编程的新手。我不知道为什么会发生这个错误。任何帮助都会很棒。
提前致谢。