2013-04-18 67 views
3

我試圖檢查圖像中像素的RGB分量,但我無法弄清楚如何去做。用repa-devil讀取索引圖像

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,但我仍未看到如何完成此項工作。

回答

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.1repa-devil使用)通過傳遞

-hide-package repa-<version> 

(填入的是正確的版本號)GHC,或者你可以通過隱藏包

ghc-pkg hide repa-<version> 
+0

D'oh!這確實是問題。我應該懷疑這一點。現在我明白了錯誤信息。 – mhwombat