Haskell Parsec combinator 'many' jest stosowany do parsera, który akceptuje pusty łańcuch

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

Kiedy uciekamparseTest items "a|b|c" z powyższym kodem otrzymuję następujący błąd:

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

Wierzę, że ma to coś wspólnegoeof imany item, jeśli usunęeof, wtedy mogę go uruchomić tak długo, jak długo linia się nie skończyeof, co czyni go bezużytecznym.

Zdaję sobie sprawę, że mogę po prostu użyćsepBy ale interesuje mnie, dlaczego ten kod nie działa i jak to działa.

questionAnswers(2)

yourAnswerToTheQuestion