1
假設有一些解析器:嘗試從下一個特殊符號occurence解析,如果解析失敗
valid :: Parser String
valid = string "valid" <* skipWhile (/= '\n')
它可以被用於從多行文字越來越"valid"
字符串:
> parseOnly (many $ valid <* optional endOfLine) "valid\nvalid\nvalid"
Right ["valid","valid","valid"]
如果有是一個行,其中valid
解析器失敗的進一步文本將不會被解析:
> parseOnly (many $ valid <* optional endOfLine) "valid\ninvalid\nvalid"
Right ["valid"]
如何獲得Rigth["valid", "valid"]
?我認爲try
在這裏可能會有所幫助,但不知道如何繼續從下一行解析。
'<*可選的(字符 '\ n')'部分是在'rest'冗餘。不錯的parsec解決方案,但問題是關於attoparsec。 –
attoparsec非常相似。一些原語解析器命名不同,但總體結構相同。 – phadej
這'可能'的方法似乎是合理的,謝謝。另外,如果你不介意的話,我刪除了所有與文本相關的包。 –