Haskell: вывод типа и состав функции
Этот вопрос был вдохновлен этимответ на другой вопрос, указывающий, что вы можете удалить каждое вхождение элемента из списка, используя функцию, определенную как:
removeall = filter . (/=)
Работаем с карандашом и бумагой из разных типов,filter
(/=)
а также(.)
функция имеет тип
removeall :: (Eq a) => a -> [a] -> [a]
что именно то, что выбуду ожидать на основании своего контракта. Однако с GHCi 6.6 я получаю
gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]
если я не укажу тип явно (в этом случае он работает нормально). Почему Haskell выводит такой специфический тип для функции?