Haskell ByteString类型错误

时间:2015-02-06 14:06:49

标签: haskell pcap bytestring

这是我第一次使用ByteStrings并且第一次看到 pcap 文件。 我基本上试图有效地使用ByteStrings读取pcap文件并在屏幕上打印其内容。 我正在使用Network.Pcap library来读取文件。可以在此处找到 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 个答案:

答案 0 :(得分:2)

编译器试图告诉您正在使用两个不同的bytestring包。有关详细信息和解决方案,请参阅此处:"Couldn't match expected type with actual type" error when using Codec.BMP