Haskell: Typinferenz und Funktionszusammensetzung

Diese Frage wurde von diesem inspiriertAntworten auf eine andere Frage, die angibt, dass Sie jedes Vorkommen eines Elements aus einer Liste mit einer Funktion entfernen können, die wie folgt definiert ist:

removeall = filter . (/=)

Arbeiten Sie es mit Bleistift und Papier aus den Arten vonfilter, (/=) und(.)hat die Funktion eine Art von

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

Das ist genau das, was Sie aufgrund des Vertrags erwarten würden. Mit GHCi 6.6 bekomme ich jedoch

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

es sei denn, ich gebe den Typ explizit an (in diesem Fall funktioniert es einwandfrei). Warum leitet Haskell einen solchen spezifischen Typ für die Funktion ab?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage