In the /usr/bin directory the Haskell execs are linked to just one specific version. In my case /usr/bin contained symbolic links ghc -> ghc-9.0.2 and ghci -> ghci-9.0.2. This is not great, since Haskell in the wild is project-based, i.e., differing versions of the ghc compiler can be used in different projects, as well as wildly diverging libraries and packages per project. Obviously Babel can't easily take advantage of this, but Haskell does allow "system-wide" library installs.
My solution was to simply delete the symlinks in /usr/bin and create new ones to the ghcup tools, e.g., ghc -> ~/.ghcup/bin/ghc etc. So now it works properly and calls up the new ghcup ghci when I do a Haskell Babel block, but this is a kludge. No elisp master, I can't find where this /usr/bin address is hardwired. If you've gotten this far you probably know more about the Haskell Babel situation than you ever wanted to, but maybe you can sniff out where this hardwire is happening.
-- ⨽
Lawrence Bottorff
Grand Marais, MN, USA