Ошибка "Не удается сопоставить ожидаемый тип с фактическим типом" при использовании Codec.BMP
У меня очень мало опыта в Хаскеле, и я хочу написать простой трассировщик лучей для практики. Поскольку я не хотел использовать инструменты с графическим интерфейсом, такие как wxHaskell (я думаю, что их изучение займет много времени), я решил просто сохранить выходное изображение в файл 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 ответ
У вас есть два 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>