[Haskell-cafe] [Parsec] No identEnd in ParsecToken?

Udo Stenzel u.stenzel at web.de
Tue Sep 5 11:06:37 EDT 2006

Stephane Bortzmeyer wrote:
> I'm trying to use Parsec for a language which have identifiers where
> the '-' character is allowed only inside identifiers, not at the start
> or the end.
> identifier = do
>     start <- letter
>     rest <- many (alphaNum <|> char '-') 
>     end <- letter       
>     return ([start] ++ rest ++ [end])
>   <?> "characters authorized for identifiers"

identifier = do
	start <- letter
	rest <- many (alphaNum <|> try inner_minus)
	return $ start : rest
 	inner_minus = do 
		char '-' 
		lookAhead alphaNum
		return '-'

> because the parser created by "many" is greedy: it consumes
> everything, including the final letter.

Yes, it does.  You could implement you own non-greedy many combinator,
but you get the associated inefficiency.  Or you could use ReadP, which
doesn't have this problem (but replaces it with other surprises).  

Eagles may soar but weasels don't get sucked into jet engines.
	-- Steven Wright 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org//pipermail/haskell-cafe/attachments/20060905/22ef6c4e/attachment.bin

More information about the Haskell-Cafe mailing list