Attoparsec具有专门用于Strict / Lazy,ByteString / Text,Char8(ascii)/ Char的模块。但它没有所有的组合。
我认为没有提供的Data.Attoparsec.ByteString.Lazy.Char8
对于研究通常被编码为ascii的大型报告特别方便。
你知道它为什么不存在吗?
答案 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
。