I use fzf when I'm on the command-line. To configure GHCi to use fzf instead of haskeline's built-in search:

Put the following in $HOME/.haskeline:

bind: ctrl-r : f z f return

and the following in $HOME/.ghci:

:def fzf _ -> pure $ ":!cat $HOME/.ghc/ghci_history | fzf --height 25"

The downside is this will rebind C-r for all haskeline applications, such as Dhall, Egison, Futhark, PureScript.