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?