[Haskell-cafe] Sequencing Parsers: a Simple Example
PR Stanley
prstanley at ntlworld.com
Sat Dec 1 12:02:30 EST 2007
> > PRS: (>>=) :: Parser a -> Parser b -> Parser b
> > p >>= f = \inp ->
> > case p inp of
> > [] -> []
> > [(v, out)] -> parse (f v) out
>
>You probably want:
>
>(>>=) :: Parser a -> (a -> Parser b) -> Parser b
>p >>= f = \inp -> case parse p inp of
> [] -> []
> [(v,out)] -> parse (f v) out
>
>Assuming that you're following Graham Hutton's book.
>
>Note that this definition won't actually compile; you probably need a
>Monad instance and a newtype to get this to work properly (see
>http://www.cs.nott.ac.uk/~gmh/Parsing.lhs for a working version of the
>same code).
PRS: That explains it then. [(v, out)] -> parse (f v) out caused a
type mismatch.
Cheers, Paul
More information about the Haskell-Cafe
mailing list