我正在尝试检查图像中像素的RGB分量,但我不知道如何做。
import Data.Array.Repa
import Data.Array.Repa.IO.DevIL
import Data.Word (Word8)
main = do
(RGB ps) <- runIL $ readImage "test.jpeg"
let k = (Z :. 142) :. 212 :. 0 :: DIM3
print $ ps ! k我得到的错误是:
[1 of 1] Compiling Main ( amy.hs, interpreted )
amy.hs:8:15:
Couldn't match expected type `Array r0 DIM3 a0'
with actual type `repa-3.2.3.1:Data.Array.Repa.Base.Array
repa-3.2.3.1:Data.Array.Repa.Repr.ForeignPtr.F
repa-3.2.3.1:Data.Array.Repa.Index.DIM3
Word8'
In the first argument of `(!)', namely `ps'
In the second argument of `($)', namely `ps ! k'
In a stmt of a 'do' block: print $ ps ! k
Failed, modules loaded: none.对于初学者来说,我不理解其中的意思。它看起来像是编译器期望一个Array something DIM3 something,但它得到了一个Array F DIM3 Word8。为什么这些类型不匹配?我已经阅读了Haskell wiki上的Repa Tutorial,但我仍然不知道如何让它工作。
发布于 2013-04-18 19:45:04
我认为你可能有两个不同版本的repa。检查方式是:
ghc-pkg list repa看看有多少个版本出现。我怀疑您是从一个实例导入Data.Array.Repa,但Data.Array.Repa.IO.DevIL依赖于另一个实例。错误消息中包含以下提示:
Couldn't match expected type `Array r0 DIM3 a0'
with actual type `repa-3.2.3.1:Data.Array.Repa.Base.Array一次,GHC说Array,一次,它说repa-3.2.3.1:Data.Array.Repa.Base.Array。这通常意味着它显式地想要在这里两次出现类型Array之间进行区分。
如果我的猜测是正确的,您可以通过以下方法隐藏repa的一个版本(不是的版本3.2.3.1,并由repa-devil使用)
-hide-package repa-<version>(填写了正确的版本号)到GHC,或者您可以通过
ghc-pkg hide repa-<version>https://stackoverflow.com/questions/16080381
复制相似问题