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