我正在尝试检查图像中像素的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维基上的Repa Tutorial,但我仍然没有看到如何使其工作。
答案 0 :(得分:4)
我想你可能有两个不同版本的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>