使用Codec.BMP时“无法将预期类型与实际类型匹配”错误

时间:2012-09-25 05:43:02

标签: haskell

我在Haskell的经验非常少,我想为练习写一个简单的光线追踪器。因为我不想使用像wxHaskell这样的GUI工具(我认为要花很多时间学习如何使用它们),所以我决定只将输出图像保存到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

这里我只想拍摄图像的第一个像素并打印其RGBA值。但我得到一个错误说

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'

我做错了什么?如何获取图像的像素并打印其值?

1 个答案:

答案 0 :(得分:9)

您已安装了两个bytestring个软件包,因此unpackBMPToRGBA32ByteString返回bytestring-0.9.2.1BS.putStrLn期望ByteString来自其他版本。< / p>

尝试ghc-pkg list bytestring列出已安装的所有bytestring版本。

解决方案可能是

  • 使用ghc-pkg unregister bytestring-<version>
  • 取消注册其中一个
  • 在构建时隐藏其中一个:ghc --make -hide-package bytestring-<version>