我正在尝试使用Haskell的Data.Binary.Get解析Gzip文件的标头。标题结构如下:
要报告错误(例如Gzip意外字段),我将以下内容用于解析器:
Data GzipError = GE1 | GE2 | ...
instance Error GzipError where ...
parseHeader :: ErrorT GzipError Get GzipHeader
这是我的问题:我如何解析所有固定的&标题中的变量字段,但同时获取字段被解析的ByteString,以便我可以计算并验证CRC?
我注意到我需要返回错误,因为我考虑过使用lookAhead
,但它的类型为Get a -> Get a
,这意味着我无法在内部进行错误处理,这是我需要的做。
这几乎就像我需要为Get monad设置书签,读取字段,然后从书签到当前位置询问Get for ByteString。当然它不提供这种功能。
有什么想法吗?
答案 0 :(得分:2)
使用runGetState,它返回消耗的字节数。然后你可以从原来的ByteString和校验和中删除那么多字节。