Haskell 二进制解析

标签 haskell binary protocols custom-protocol

我一直在尝试在 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/

相关文章:

c++ - 十进制转二进制 C++

Swift-如何接受多个(联合)类型作为参数

haskell - 简化一些 Haskell 代码

haskell - TemplateHaskell 类名与 newName 冲突

c - “Invalid operands to binary expressions” 错误

insert - Lua:防止二进制代码中的回车

c - Git HTTP 错误 'fatal: protocol error: bad line length character: '

ios - 符合协议(protocol)的 UIView 子类的 Swift 数组

Haskell:Lambda 函数 - 错误 - 逃脱其范围

exception - Haskell 惰性异常——区分多个异常?