我在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
Run Code Online (Sandbox Code Playgroud)
在这里,我只想拍摄图像的第一个像素并打印其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'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?如何获取图像的像素并打印其值?
你有两个bytestring安装的软件包,所以unpackBMPToRGBA32返回ByteString的bytestring-0.9.2.1,并BS.putStrLn预计ByteString其他版本.
尝试ghc-pkg list bytestring列出bytestring已安装的所有版本.
解决方案可能是
ghc-pkg unregister bytestring-<version>ghc --make -hide-package bytestring-<version>