Questa domanda è stato ispirato da questo answer a un'altra domanda, che indica che è possibile rimuovere ogni occorrenza di un elemento da un elenco utilizzando una funzione definita come:Haskell: inferenza di tipo e la funzione di composizione
removeall = filter . (/=)
Lavorando fuori con carta e matita dai tipi di filter
, (/=)
e (.)
, la funzione ha un tipo di
removeall :: (Eq a) => a -> [a] -> [a]
che è esattamente quello che ci si aspetta in base al suo contratto. Tuttavia, con GHCi 6.6, ottengo
gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]
a meno che non specificare il tipo in modo esplicito (nel qual caso funziona benissimo). Perché Haskell deduce un tipo così specifico per la funzione?