
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.