I’ve never used a Haskell formatter that didn’t affect how I wrote Haskell. When you’re considering how the formatter will mangle your code and changing how you solve the problem to avoid it (e.g. making it less point-free, not using a certain operator) then that formatter is being too big for its britches. I should’ve have that extra cognitive load - a formatter is supposed to reduce cognitive load.
I suspect if you want a standard formatter, it will have to be more “partial” than gofmt. Pick a few common things to standardize on (imports, type signatures, control syntax) and still allow the programmer to meaningfully use whitespace to manually format programs.
You’ll never capture and respect all the ways people use whitespace productively, so you’ll inevitably muck up someone’s code. This in general is why I’ve never bothered with a Haskell formatter ever - even though I use formatters in other langs.
That’s the big advantage Go and Rust have for automated formatters - those syntaxes are ugly as sin. Elm doesn’t have ugly syntax (it’s close to Haskell), but it’s formatter makes all Elm code sooo ugly.
I guess when people choose formatters, it’s in a setting where you are in the realm of brutal efficiency trade-odds like that (big corporate/open-source project + don’t trust all those programmers to have good taste) so it’s worth it to also make Haskell a little uglier