No entiendo por qué la función siguiente funciona:Confusión con el tipo de inferencia Haskell
isLongerThanN :: Integral n => n -> [a] -> Bool
isLongerThanN n xs = length xs > fromIntegral n
pero el siguiente no:
isLongerThanN' :: Integral n => n -> [a] -> Bool
isLongerThanN' n xs = length xs > n
que arroja el error
Could not deduce (n ~ Int)
from the context (Integral n)
bound by the type signature for
isLongerThanN' :: Integral n => n -> [a] -> Bool
at blah.hs:140:1-35
`n' is a rigid type variable bound by
the type signature for
isLongerThanN' :: Integral n => n -> [a] -> Bool
at blah.hs:140:1
In the second argument of `(>)', namely `n'
In the expression: length xs > n
In an equation for `isLongerThanN'':
isLongerThanN' n xs = length xs > n
(que probablemente he entendido mal)
En todo caso, esperaría que fuera al revés, ya que de Integral está efectivamente ampliando el tipo de variable n.
No escriba 'si foo entonces la verdadera cosa false'. Es lo mismo que simplemente 'foo'. – hammar
tienes razón, gracias; Lo he modificado, pero esa no es la pregunta – Inept
Es por eso que no lo publicó como una respuesta ... – Jasper