我是Haskell的新手,我的第一个项目是解析捕获的WLAN数据包.解析这种分组的一种常见模式是头字段将定义剩余字节的结构.作为一般示例,数据包的格式如下:
header + [payload A | payload B | ..]
Run Code Online (Sandbox Code Playgroud)
其中标头中的标志字段(可以是位图)指定包中包括哪些有效载荷.有关此格式的具体示例,请查看radiotap.
类似的线程建议只使用这样的一系列parse操作:
parseAll = do
hdr <- parseHeader
pa <- parsePayloadA
pb <- parsePayloadB
Run Code Online (Sandbox Code Playgroud)
然而,似乎不能在我的情况下应用有效载荷的存在A并且B由头部定义.换句话说,数据解析的控制流程需要遵循先前的解析结果.我想明白,如果有一种通用的方法来解析这种模式的二进制数据?
我有关于Haskell中的和类型的这个问题.
我想创建一个由两个或更多其他类型组成的和类型,每个类型可能包含多个字段.一个简单的例子是这样的:
data T3 = T1 { a :: Int, b :: Float} | T2 { x :: Char } deriving (Show)
Run Code Online (Sandbox Code Playgroud)
在我的理解,T1并且T2是其使用记录语法数据构造.看来,定义T3将成长为中域的数量T1或T2增加.我的问题是,如果字段数量很大,如何实际处理这些求和类型构造函数?或者,将sum类型与记录语法混合是一个好主意吗?