Haskell Parsec combinator 'many' is applied to a parser that accepts an empty string
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 When I run parseTest items "a|b|c" with the code above I get the following error: *** Exception: Text.ParserCombinators.Parsec.Prim.many: combinator 'many' is applied to a parser that accepts an empty string. I believe it has something to do with