我一直在尝试在 haskell 中实现一个协议(protocol)解析器,而且我对这门语言还很陌生,尤其是在涉及 monad 时。我一直在使用binary-0.5.0.2,并描述了我的协议(protocol)的 header 和所有有效负载。我想要解析的消息如下所示: header + (payload A, Payload B, ..) 其中 header 中的字段指定消息具有的有效负载类型。
我已经成功解析了字节串中的第一条消息,但不知道如何读取下一条消息,丢弃在处理第一条消息时读取的字节。
这可能相当模糊,但我宁愿在通用解析器上获取输入,也不愿将丑陋的代码更改为以这种方式工作。
感谢您的帮助
最佳答案
只需使用一系列解析操作,它们就会在执行过程中消耗输入。
parseAll = do
hdr <- parseHeader
pa <- parsePayloadA
pb <- parsePayloadB
...
关于Haskell 二进制解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517620/