2011-04-04 36 views
1

你好我正在尝试使用runGetState monad在Haskell中编写一个简单的二进制解析器。Haskell:runGetState和列表

但是,我面临解析字段列表的问题,我卡住了。

问题是,字段列表可能会不时变化,因此我想构建列表字段,然后使用地图读取它们。下面的代码片段:

readField field_type = 

      case (field_type) of 
       0 -> A1 <$> getWord8 
       132 -> A2 <$> getWord16be 
       134 -> A3 <$> getWord32be 

parseData fields = return $ map (\x -> readField x) a 

(fdata,input,no) <- return (runGetState (parseData [132,134,0]) input no) 

我试过上面的解决方案没有运气。谁能告诉我我做错了什么?

+0

请让我们知道是什么问题。有错误吗?不是预期的产出?只是为了帮助我们指导我们正在寻找的内容,而不必亲自编译和运行代码。 – luqui 2011-04-04 22:06:38

回答

1

看起来应该是这样的

parseData = mapM readField 
+0

给我打扰。我刚刚尝试过你写的和它的作品!谢谢@augustss。 – dirtdog 2011-04-04 17:09:28