[Haskell-cafe] How to use notFollowedBy function in Parsec

Sara Kenedy sarakenedy at gmail.com
Tue Nov 22 09:58:04 EST 2005


Hello,
I run as follows:

simple::Parser String
simple = do manyTill anyToken (semi <|> eof)

run:: Show a => Parser a -> String -> IO()

run p input

	= case (parse p "" input) of

		Left err -> do {putStr "parse error at " ;print err}

		Right x -> print x


ParsecLanguage> :load Test.hs
Type checking
ERROR "Test.hs":21 - Type error in application
*** Expression     : semi <|> eof
*** Term           : semi
*** Type           : GenParser Char () String
*** Does not match : GenParser a b ()

Do you know what happens? Thank you.

On 11/22/05, Daniel Fischer <daniel.is.fischer at web.de> wrote:
> Am Dienstag, 22. November 2005 14:51 schrieben Sie:
> > Am Montag, 21. November 2005 03:27 schrieb Sara Kenedy:
> >
> > May I suggest
> >
> > endBy anyToken semi ? -- optionally replace semi by "char ';'", if you
> ^^^^^^^^
>
> Oops, I confused endBy and manyTill !! Also below.
> And since maybe there isn't any semicolon, I'd say
>
> manyTill anyToken (semi {- try semi, perhaps -} <|> eof)
>
> > don't want to skip whitespace
> >
> > I think this is what you want --- stop at the first semicolon.
> >
> > If you want to ignore just a final semicolon, you might use
> >
> > endBy anyToken (optional semi >> eof),
> >
> > if you want to stop at the last semicolon, whatever comes thereafter, you
> > have a problem, you'd need long lookahead.
> >
>  Cheers again,
>  Daniel
>
>


More information about the Haskell-Cafe mailing list