Even Haskell people find themselves easily in the cabal hell. Everyone is aware of the issue, but it's still not solved.
It's possible this situation has improved since last year, when I switched to i3, but it can never be fully rectified as long as the config file is itself Haskell source. I find it surprising that, despite the Haskell community's claims that Haskell is great for writing domain-specific languages, xmonad does not expose a DSL for you to configure it with.
I presume it's nice that you can actually customize xmonad with code. So an appropriate DSL would be a programming language so using Haskell makes sense. Any other DSL would be more limiting.
> If you want your config to use a Haskell package that's not provided by your distro, as many of the config examples do, you're out of luck unless you want to take the cabal route.
I can understand that this would cause pain. I suppose it's up to cabal and/or distros to fix this.
You've hit the nail on the head here --- the problem is that xmonad offers an unlimited scope for configuration, including extensions to the behavior of xmonad. I'd rather see a clear separation between mechanisms for configuration and extension, even if that reduces the power of configuration.
My biggest beef with xmonad is that its configuration file is itself Haskell source code. So even if xmonad is the only Haskell project I use, I have to pull in GHC to compile my configuration. Since I'm not a Haskell guy, this means that I'm easily tipped off the cliff into cabal hell, which is not where I want to be when updating my WM config. For all that, xmonad is great when it works, and I stuck with it from 2011 to 2014 before moving on to i3.