#maybe って最後の最後に使うって言うイメージなので、orElseM の中で使うのは、ちょっと違和感がありました。慣れの問題かもしれません。
#orElse は STM で使われているので、別の名前の方がいいかもしれません。
#違和感があっても型チェックが通ればよいのです =) しかし、hiding import とか qualified import を使えば名前の問題はどうにでもなるのでは?
#(return . foldr mplus mzero =<<) . sequence
#でいいのでは?