Haskell Parsec combinator 'many' é aplicado a um analisador que aceita uma string vazia

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

Quando eu corroparseTest items "a|b|c" com o código acima recebo o seguinte erro:

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

Eu acredito que tem algo a ver comeof emany item, se eu removereof, então eu posso fazê-lo funcionar, desde que a linha não termineeof, o que torna inútil.

Eu percebo que eu poderia usarsepBy mas o que me interessa é porque este código não funciona e como fazê-lo funcionar.

questionAnswers(2)

yourAnswerToTheQuestion