
A B C D ghc yes no no yes hugs yes no no no nhc98 yes yes no yes Language.Haskell.Parser.parseModule no yes yes no report no no no no
... but I beg to differ with the row for the "report". Looking carefully at code examples A and B, notice the extra single space indentation on the second line:
** A: g xs = do ys <- workM xs if null ys then return [] else do zs <- workM ys return zs
I believe nhc98 is correct in parsing this as: g xs = do ys <- workM xs (if null ys then return [] else do zs <- workM ys return zs)
** B: g xs = do ys <- workM xs if null ys then return [] else do zs <- workM ys return zs
Likewise, isn't the following parse correct?: g xs = do ys <- workM xs (if null ys then return [] else do zs <- workM ys (return zs))
** C: f xs = case xs of y:ys -> case ys of z:zs -> zs
We all agree that this is a parse error.
** D: f x = case x of False -> do { return x; }
Although it is technically wrong to accept this, Simon and I believe it would be reasonable, because it is unambiguous. Regards, Malcolm