Der Haskell Parsec-Kombinator 'many' wird auf einen Parser angewendet, der eine leere Zeichenfolge akzeptiert

import Text.ParserCombinators.Parsec

delimiter :: Parser ()
delimiter = do char '|'
               return ()
          <?> "delimiter"


eol :: Parser ()
eol = do oneOf "\n\r"
         return ()
    <?> "end of line"

item :: Parser String
item = do entry <- manyTill anyChar (try eol <|> try delimiter <|> eof)
          return entry

items :: Parser [String]
items = do result <- many item
           return result

Wenn ich renneparseTest items "a|b|c" Mit dem obigen Code erhalte ich den folgenden Fehler:

*** Exception: Text.ParserCombinators.Parsec.Prim.many: 
combinator 'many' is applied to a parser that accepts an empty string.

Ich glaube, es hat etwas damit zu tuneof undmany item, wenn ich entferneeof, dann kann ich es zum Laufen bringen, solange die Leitung nicht endeteof, was es irgendwie nutzlos macht.

Mir ist klar, dass ich es nur gebrauchen könntesepBy Aber was mich interessiert, ist, warum dieser Code nicht funktioniert und wie man ihn zum Laufen bringt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage