Один лайнер, о котором я могу думать, избегает охранников:
import Data.List
howManyEqual :: Int -> Int -> Int -> Int
howManyEqual a b c = maximum $ 0 : (filter (> 1) . map length . group . sort) [a,b,c]
Это явно менее эффективно и кажется излишним использованием композиции функций.
Вероятно, имеет смысл использовать алгоритм, подобный этому, только если вы вводите огромный список, в котором вы хотите подсчитать, сколько элементов больше всего равно. Это O (n log n).