literales numéricos tienen un tipo polimórfico:¿Por qué los valores polimórficos no se infieren en Haskell?
*Main> :t 3
3 :: (Num t) => t
Pero si Ato una variable a un tal literal, el polimorfismo se pierde:
x = 3
...
*Main> :t x
x :: Integer
Si defino una función, por el contrario, por supuesto es polimórfico:
f x = 3
...
*Main> :t f
f :: (Num t1) => t -> t1
pude proporcionar una declaración de tipo para garantizar la x
queda polimórfica:
x :: Num a => a
x = 3
...
*Main> :t x
x :: (Num a) => a
¿Pero por qué es esto necesario? ¿Por qué no se deduce el tipo polimórfico?
¿Haría alguna diferencia? (Realmente no lo sé, aunque sospecho que no) – delnan
Hace la diferencia; Quiero que el tipo sea lo más general posible. –
Ven de nuevo? No importa si 'x' es' Integer' o 'Num a => a', puede pasarlo a cualquier función que espere un' Num'. Las funciones tienen que ser genéricas, los valores no. – delnan