Haskell Parsec комбинатор 'many' применяется к парсеру, который принимает пустую строку

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

Когда я бегуparseTest items "a|b|c" с кодом выше я получаю следующую ошибку:

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

Я считаю, что это как-то связано сeof а такжеmany itemесли я удалюeofтогда я смогу заставить его работать, пока строка не заканчиваетсяeof, что делает его бесполезным.

Я понимаю, что могу просто использоватьsepBy но меня интересует, почему этот код не работает и как заставить его работать.

Ответы на вопрос(2)

Ваш ответ на вопрос