> Hi
> (>>=) :: Parser a -> Parser b -> Parser b
> p >>= f = \inp ->
> case p inp of
> [] -> []
> [(v, out)] -> parse (f v) out
> based on a lot of guesswork, after the mess created by the OCR, I
> managed to get the above example to work syntactically but is it
> semantically correct?
> Thanks, Paul
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).
Shachaf
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe