
If there's a problem with haskell emacs mode, it seems very likely that if you ask the maintainer nicely, he'll do something about it. See http://www.iro.umontreal.ca/~monnier/elisp/#haskell-mode
I asked Stefan a while ago:
I like your Emacs mode but it behaves a bit oddly when trying to indent if/then/else expressions in do notation. Typing tab only gives me one possible indentation, like so:
do if True then foo else bar
That is, the then and else branches line up under the if which is an error according to Haskell's layout rule. It probably should indent them like "case" with the then lining up with the condition to the if. I'd fix it myself if I knew Lisp but I don't. :/
Yes, it's a (recently) known problem which I haven't fixed yet. It's in the indent.hs test-suite, with a "FIXME" :-(