Cette question a été inspirée par ce answer à une autre question, ce qui indique que vous pouvez supprimer toutes les occurrences d'un élément d'une liste à l'aide d'une fonction définie comme:Haskell: inférence de type et la composition fonction
removeall = filter . (/=)
Travailler dehors avec un crayon et du papier à partir des types de filter
, (/=)
et (.)
, la fonction a un type de
removeall :: (Eq a) => a -> [a] -> [a]
ce qui est exactement ce que vous attendez en fonction de son contrat. Cependant, avec GHCi 6.6, je reçois
gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]
sauf si je spécifie le type explicitement (auquel cas cela fonctionne bien). Pourquoi Haskell infère-t-il un type spécifique pour la fonction?