Haskell: wnioskowanie typu i skład funkcji

To pytanie zostało zainspirowane przez toodpowiedź na inne pytanie, wskazując, że możesz usunąć każde wystąpienie elementu z listy za pomocą funkcji zdefiniowanej jako:

removeall = filter . (/=)

Opracowanie ołówkiem i papierem z rodzajówfilter, (/=) i(.), funkcja ma typ

removeall :: (Eq a) => a -> [a] -> [a]

co jest dokładnie tym, czego można oczekiwać na podstawie umowy. Jednak z GHCi 6.6 otrzymuję

gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]

chyba że określę typ wyraźnie (w takim przypadku działa dobrze). Dlaczego Haskell wywodzi taki konkretny typ funkcji?

questionAnswers(2)

yourAnswerToTheQuestion