I just found out that GHC 9.4 seems to have brought a major improvement (for me at least):
If I have diamond dependencies Main.hs → A.hs, B.hs → Lib.hs, and I change Lib.hs breaking both A and B, ghc --make now tries compiling both A and B, showing errors for both. It used to be that ghc --make would switch between trying to compile A and B, making iteration very painful.
So, big thanks to the GHC team for addressing this!
I couldn’t really make this out in the changelog, was it a side-effect of the multiple home module work?
(I ran across this trying to reproduce cabal issue Nondeterministic build order makes iterating painful · Issue #8215 · haskell/cabal · GitHub to see about reporting it against GHC.)