[Haskell-beginners] Help with monad syntax?
Arindam Roy
arind_roy at fast-mail.org
Tue Aug 26 03:44:14 EDT 2008
> To make do notation work, you have to
>
> (1) use a data type for Parser (instead of a type synonym) and
> (2) declare that data type an instance of the Monad typeclass.
>
> Your code should look something like this:
>
> data Parser = Parser (...)
> instance Monad Parser where
> return v = ...
> Parser p >>= f = ...
>
> ...
Thanks, I'll try this. I haven't read upto the data declaration and inheritance
yet, but I'll try it as soon as I have :-)
>
> > (>>=) :: Parser a -> (a -> Parser b) -> Parser b
> > p >>= f = \inp -> case parse p inp of
> > [] -> []
> > [(v, out)] -> parse (f v) out
>
> What happens if p returns more then one result?
>
The way Parsers are designed in the book, it can't. Parsers always return a list
with one element. The only reason the return value is a list is to use the empty
list as an error indication.
Arindam
More information about the Beginners
mailing list