questions about "Write yourself a Scheme in 48 hours"

I'm working through "Write yourself a Scheme in 48 hours". I'm on the parsing section http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing and I have a question about the following function parseNumber :: Parser LispVal parseNumber = liftM (Number . read) $ many1 digit digit looks like a variable, but I don't see it mentioned anywhere. Where is the input coming from? Is this an example of partial application?

digit is predefined parser. The implementation is similar to
digit = oneOf "0123456789"
Be sure to read carefully though. At the beginning of Chapter 2 (Parsing) it
reads:
*Parsec provides a number of pre-built parsers: for example, letter and
digit are library functions.*
Also, I recommend downloading the ebook as PDF. It is easier to read that
way.
Best regards,
Krzysztof Skrzętnicki
On Sat, Apr 9, 2011 at 03:45, Michael Litchard
I'm working through "Write yourself a Scheme in 48 hours". I'm on the parsing section http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing
and I have a question about the following function
parseNumber :: Parser LispVal parseNumber = liftM (Number . read) $ many1 digit
digit looks like a variable, but I don't see it mentioned anywhere. Where is the input coming from? Is this an example of partial application?
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners

On Fri, 8 Apr 2011 18:45:26 -0700
Michael Litchard
I'm working through "Write yourself a Scheme in 48 hours". I'm on the parsing section http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing
and I have a question about the following function
parseNumber :: Parser LispVal parseNumber = liftM (Number . read) $ many1 digit
digit looks like a variable, but I don't see it mentioned anywhere.
It's from the Parsec library. It parses a single digit from the input.
Where is the input coming from?
To be determined. parseNumber is a Parser monad that returns a LispVal (at least, that's what the type says it is). You run it with the parse function, which is where you specify the input to be parsed.
Is this an example of partial application?
No. All the functions have all their arguments supplied. Demonstrating
that is left as an exercise.
I started with WYAS, but wanting to actually do the exercises meant
that starting with Parsec (what looks like a particularly difficult to
understand example of one of the more difficult parts of haskell) was
a bad idea. I switched to Real World Haskell
(http://book.realworldhaskell.org/read/), which covers just enough
monads to let you do some IO before getting into the rest of the
language. It also covers monads in general before getting into the
Parsec library. Not that there's anything wrong WYAS (and I plan to
get back to it), but RWH fit my needs better. You might give it a
look.
participants (3)
-
Krzysztof Skrzętnicki
-
Michael Litchard
-
Mike Meyer