Ошибка "Не удается сопоставить ожидаемый тип с фактическим типом" при использовании 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>
Другие вопросы по тегам