You could use stack instead of cabal. The most recent nightly stack snapshots use GHC 8.4.3. Stack has a lot[1] of advantages. One of them is that you can use a bunch of different versions of GHC at the same time. Whereas Cabal keeps a global collection of Haskell software, Stack keeps a bunch of different local ones, while cleverly avoiding wasting memory like you might expect that to imply. If you have a project that needs old stuff that's incompatible with new stuff, you're SOL with Cabal but it's no problem in Stack.