Ошибка типа Haskell ByteString

Я впервые использую ByteStrings и впервые вижу файл pcap. Я в основном пытаюсь эффективно прочитать файл pcap с помощью ByteStrings и распечатать его содержимое на экране. Я использую библиотеку Network.Pcap для чтения файла. Вариант ByteString можно найти здесь: Network.Pcap ByteString. Чтобы упростить задачу, я хочу просто напечатать первую строку файла, чтобы мой код выглядел так:

1 import qualified Data.ByteString as B

2 printIt :: PktHdr -> B.ByteString -> IO ()
3 printIt ph bytep = do
4    print $ hdrCaptureLength ph  -- not important
5    print $ bytep

6 main = do
7    f <- openOffline "file.pcap"
8    dispatchBS f (1) printIt

где printIt является функцией callbackBS, которая работает с телом файла

Компилятор жалуется на это сообщение:

Couldn't match type ‘B.ByteString’
              with ‘bytestring-0.10.4.0:Data.ByteString.Internal.ByteString’
NB: ‘B.ByteString’
      is defined in ‘Data.ByteString.Internal’
          in package ‘bytestring-0.10.4.1’
    ‘bytestring-0.10.4.0:Data.ByteString.Internal.ByteString’
      is defined in ‘Data.ByteString.Internal’
          in package ‘bytestring-0.10.4.0’
Expected type: CallbackBS
  Actual type: PktHdr -> B.ByteString -> IO ()
In the third argument of ‘dispatchBS’, namely ‘printIt’
In a stmt of a 'do' block: dispatchBS f (1) printIt

Я понимаю, что для компилятора функция callbackBS должна иметь тип: PktHdr -> ByteString -> IO ()в то время как в строке 2 типы PktHdr ->B.ByteString -> IO (), Однако я не могу просто использовать тип ByteString, потому что тогда я буду сталкиваться с конфликтами с функциями, определенными в прелюдии для обычных списков. Есть ли у вас какие-либо идеи?

1 ответ

Решение

Компилятор пытается сказать вам, что вы используете два разных bytestring пакеты. Подробности и решение см. Здесь: ошибка "Не удалось сопоставить ожидаемый тип с фактическим типом" при использовании Codec.BMP

Другие вопросы по тегам