Andrew,
I use Emacs with HLS and mostly it is fine until I need to change something.
I tried to extend Proof General extension with bullet auto insertion feature for subgoals and gave up because
ELisp code is way harder to understand than Haskell.
Emacs lots of libraries and the built-in interpreter with API that has access to the whole editor.
The only drawback is these code base hard to maintain.
This experience motivated to me combine Haskell interpreter with Emacs.
Hamacs can load Haskell code from a "cabal" file, call Emacs API and provide functions to be called by Emacs.
It is tested on save-excursion Emacs macro.