我已经写了下面的Haskell代码Haskell:如何在输入字符串为空时停止Data.Attoparsec.Char8.sepBy?
import Data.Attoparsec (Parser)
import qualified Data.Attoparsec.Char8 as A
import qualified Data.ByteString.Char8 as B
someWithSep sep p = A.sepBy p sep
代码是假设这种方式工作:
main*> A.parse (someWithSep A.skipSpace A.decimal) $ B.pack "123 45 67 89"
Done "" [123,45,67,89]
但因为我在上面写的代码定义someWithSep一样,我总是得到以下行为:
main*> A.parse (someWithSep A.skipSpace A.decimal) $ B.pack "123 45 67 89"
Partial _
,除非我提供了一个损坏的条目:
main*> A.parse (someWithSep A.skipSpace A.decimal) $ B.pack "123 45 67 89f"
Done "f" [123,45,67,89]
我该如何纠正?
感谢回复
附录:attoparsec中的'feed'函数也可以用来提供空字符串,所以你也可以使用:'A.feed(A.parse(someWithSep A.skipSpace A由Matchi.com提供回到cimal)$ B.pack“123 45 67 89”)B.empty' – 2010-10-01 09:16:42