2012-09-25 22 views
5

Tôi có rất ít kinh nghiệm trong Haskell và tôi muốn viết một trình theo dõi tia đơn giản để thực hành. Bởi vì tôi không muốn sử dụng các công cụ GUI như wxHaskell (tôi nghĩ rằng nó sẽ mất rất nhiều thời gian để tìm hiểu làm thế nào để sử dụng chúng), tôi quyết định chỉ cần lưu hình ảnh đầu ra vào tập tin BMP. Nhưng tôi có một vấn đề ở đây:Lỗi "Không thể khớp với kiểu dự kiến ​​với loại thực tế" khi sử dụng Codec.BMP

module Main where 

import Codec.BMP 
import qualified Data.ByteString as BS 

main = do 
    Right bmp <- readBMP "grass.bmp" 
    BS.putStrLn $ BS.take 4 $ unpackBMPToRGBA32 bmp 

Ở đây tôi chỉ muốn lấy điểm ảnh đầu tiên của hình ảnh và in giá trị RGBA của nó. Nhưng tôi gặp lỗi khi nói

Couldn't match expected type `BS.ByteString' 
      with actual type `bytestring-0.9.2.1:Data.ByteString.Internal.ByteString' 
In the return type of a call of `unpackBMPToRGBA32' 
In the second argument of `($)', namely `unpackBMPToRGBA32 bmp' 
In the second argument of `($)', namely 
    `BS.take 4 $ unpackBMPToRGBA32 bmp' 

Tôi đang làm gì sai? Làm thế nào tôi có thể lấy các điểm ảnh của hình ảnh và in các giá trị của chúng?

Trả lời

9

Bạn có hai bytestring gói cài đặt, vì vậy unpackBMPToRGBA32 trở ByteString từ bytestring-0.9.2.1, và BS.putStrLn hy vọng ByteString từ phiên bản khác.

Hãy thử ghc-pkg list bytestring để liệt kê tất cả bytestring phiên bản được cài đặt.

Và giải pháp có thể là

  • unregister một trong số họ với ghc-pkg unregister bytestring-<version>
  • ẩn một trong số họ khi tòa nhà: ghc --make -hide-package bytestring-<version>
+0

Yeah, nó hoạt động! Cảm ơn, tùy chọn '-hide-package' này thực sự hữu ích! –

+1

Cảm ơn, Yuras. Nếu bạn muốn sử dụng gói-ride với runhaskell (thay vì xây dựng), bạn sẽ cần phải gọi sau đây: 'runhaskell -hide-package --ghc-arg = bytestring- Main.hs' – neillb

Các vấn đề liên quan