那么Data.Attoparsec.ByteString.Lazy.Char8怎么样?

时间:2014-12-01 20:18:00

标签: haskell attoparsec

Attoparsec具有专门用于Strict / Lazy,ByteString / Text,Char8(ascii)/ Char的模块。但它没有所有的组合。

我认为没有提供的Data.Attoparsec.ByteString.Lazy.Char8对于研究通常被编码为ascii的大型报告特别方便。

你知道它为什么不存在吗?

1 个答案:

答案 0 :(得分:0)

我不认为这是必要的,因为这两个模块看起来并不相互重叠。

Data.Attoparsec.ByteString.Char8专门用于解析ASCII数据的额外解析器。这些只是他们的Word8对应物的变体,并且他们使用相同的底层monad,因此您应该能够毫无问题地混合和匹配。

Data.Attoparsec.ByteString.Lazy提供了另一个parse函数,可用于针对延迟字节字符串运行解析器。这在任何方面都不是特别的,它只是严格版本的包装器,迭代地将惰性ByteString的块推送到解析器中。

据我所知,你没有理由不能同时使用它们。例如:

import Data.ByteString.Lazy
import qualified Data.Attoparsec.ByteString.Char8 as Char8
import qualified Data.Attoparsec.ByteString.Lazy as Lazy

myParser :: Char8.Parser T
myParser = -- use parsers from Char8 if you'd like

lazyParse :: Char8.Parser T -> ByteString -> Lazy.Result T
lazyParse p s = Lazy.parse p s -- parse a lazy ByteString

您使用Char8中的组合器来定义解析器,然后使用Lazy中的函数来运行它。因此,不需要Data.Attoparsec.ByteString.Lazy.Char8