Haskell: inferencia de tipos y composición de funciones.

Esta pregunta fue inspirada por esteresponder a otra pregunta, lo que indica que puede eliminar cada aparición de un elemento de una lista utilizando una función definida como:

removeall = filter . (/=)

Trabajando con lápiz y papel de los tipos defilter, (/=) y(.), la función tiene un tipo de

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

que es exactamente lo que esperas basado en su contrato. Sin embargo, con GHCi 6.6, obtengo

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

a menos que especifique el tipo explícitamente (en cuyo caso funciona bien). ¿Por qué Haskell está inferiendo un tipo tan específico para la función?

Respuestas a la pregunta(2)

Su respuesta a la pregunta