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