Encoding text to keypresses on old phone keyboard (0-9*#)
Library combinators and list comprehension syntax allow much collapsing of your code, and many of your type aliases and oneliners do not deserve a name, except perhaps for those at the bottom because you export them.

type KeyboardLayout = [(Char, [Char])]

stringToKeyTaps :: KeyboardLayout -&gt; String -&gt; [(Char, Int)]
stringToKeyTaps kmap cs =
  [ (label, index + 1)
  | c &lt;- cs
  , c' &lt;- ['^' | isUpper c] ++ [toLower c]
  , Just (label, index) &lt;- asum $ (map . traverse) (elemIndex c') kmap
  ]

fingerTaps :: [(Char, Int)] -&gt; Int
fingerTaps = sum . map snd

mostPopularElement :: (Ord a, Eq a) =&gt; [a] -&gt; a
mostPopularElement = head . head . sortOn length . group . sort