Ошибка типа 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