我已經寫了下面的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