Slavomir Kaslev wrote:
>> freeParser = freeParser' minBound
>>     where enumAll' :: (Bounded a, Enum a) => a -> [a]
>>           enumAll' _ = enumAll
>>           freeParser' :: (Enum a, Bounded a, Show a, Read a) => a -> Parser a
>>           freeParser' x = liftM read $ choice (map (string . show) (enumAll' 
>> x))

1. I would use an explicit function argument instead of "Show" to allow
strings starting with lower case.

2. Calling read after parsing looks stupid. Just return the value shown
as parser result (within map).

3. Instead of the "string" parser, it should be checked if a further
alphaNum or '_' follows (for the longest match). And don't forget "try"!

Cheers Christian

> [Actually, in my code I use reserved' (reserved' x = reserved x >> return x)
> instead of string, where reserved is from Parsec's builtin tokenizer (which 
> does
> some neat things behind the curtains). Here string is used just to
> illustrate the
> expamle.]
> 
> The problem is that freeParser, although useful, is far from elegant. It's
> something that I came up with by trial and error. In short: it's a hack.
> 
> I would like to hear your suggestions about how it can be beautified.
> 
> Thank you in advance.
> 
> Cheers!
> 
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to