[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