Haskell: вывод типа и состав функции

Этот вопрос был вдохновлен этимответ на другой вопрос, указывающий, что вы можете удалить каждое вхождение элемента из списка, используя функцию, определенную как:

removeall = filter . (/=)

Работаем с карандашом и бумагой из типовfilter, (/=) а также(.)функция имеет тип

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

это именно то, что вы ожидаете, основываясь на его контракте. Однако с GHCi 6.6 я получаю

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

если я не укажу тип явно (в этом случае он работает нормально). Почему Haskell выводит такой специфический тип для функции?

Ответы на вопрос(2)

Ваш ответ на вопрос