Skip to content

Text.Parsec.Combinators.notFollowedBy too restrictive #524

@bos

Description

@bos

(Imported from Trac #531, reported by nzeh on 2009-03-23)

Say, you want to write something like

aParser :: Parser String
aParser = many1 $ noneOf "a" <|>
                  ( char 'a' >>
                    notFollowedBy $ string "rrgh" >>
                    return 'a'
                  )
This fails because, according to the type signature of notFollowedBy, since the parser parses a stream characters, the parser given to notFollowedBy must have return type Char, which it doesn't. The same happens for something a little more meaningful such as
nonFinalA :: Parser ()
nonFinalA = char 'a' >> notFollowedBy eof
because eof has return type (). This is a request to change the type signature of notFollowedBy to accept a parser with arbitrary return type.

Rationale:

  • The return type is ignored anyway.
  • The return type has only a loose connection with what part of the input stream the parser consumes.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions