Attoparsec有专门用于严格/惰性、字节串/文本、Char8 (ascii)/Char的模块。但它并不具备所有的组合。
我认为没有提供的Data.Attoparsec.ByteString.Lazy.Char8对于处理倾向于编码为ascii的大型报告会特别方便。
你知道为什么它不存在吗?
发布于 2018-05-26 06:21:01
我不认为这是必要的,因为这两个模块看起来并不相互重叠。
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。
https://stackoverflow.com/questions/27236539
复制相似问题