Haskell二进制解析

5
我一直在尝试用Haskell实现协议解析器,但对该语言尤其是单子(monads)方面还很陌生。我一直使用binary-0.5.0.2,并已经描述了我的协议的头部和所有有效载荷。我想要解析的消息看起来像这样:头部+(有效载荷A,有效载荷B,...),其中头部的一个字段指定了消息具有哪种类型的有效载荷。
我已经成功地解析了字节串中的第一个消息,但不知道如何读取下一个消息并且丢弃在处理第一个消息时读取的字节。
这可能相当模糊,但我宁愿得到关于通用解析器的输入,而不是将我的丑陋代码改为按照这种方式工作。
感谢您的帮助。
2个回答

6
只需使用一系列解析操作,它们将逐步消耗输入。
parseAll = do
    hdr <- parseHeader
    pa <- parsePayloadA
    pb <- parsePayloadB
    ...

2
< p > Data.Binary.GetrunGetState返回的元组的第二个元素是剩余的ByteString。您可以简单地继续应用解析器,直到出现错误或字节用尽为止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接