Esta función:Num vs Integral
hola :: (Integral a) => a -> String
hola 1 = "OK"
hola _ = "asdf"
funciona bien. Pero éste:
hola :: (Num a) => a -> String
hola 1 = "OK"
hola _ = "asdf"
no puede ser compilado: "No se ha podido deducir (Eq a) que se deriven de lo literal` 1' "
realmente no lo entiendo. Estoy leyendo un tutorial donde se dice
"integral es también una clase de tipos numéricos. Num incluye todos los números, incluyendo los números reales y números enteros, Integral incluye sólo números enteros (integrales). En esta clase de tipos son Int y Entero." http://learnyouahaskell.com/types-and-typeclasses
¿Por qué no puedo utilizar Num?
Trabajando en la versión anterior :) ¡Gracias! Creo que este cambio hace que este lenguaje sea un poco confuso ... :( – user1726613
Bueno, sin duda causará mucha confusión (y rotura de paquetes) en el período de transición. Pero el consenso general fue que la ganancia es mayor que la pérdida (no más instancias falsas de 'Eq' y 'Show' para cosas como funciones que pueden tener instancias 'Num' sensibles, excepto para los viejos requisitos' Eq' y 'Show'. Lo mismo (mutatis mutandis) se aplica a la eliminación de' Num' superclase de 'Bits'. Afortunadamente, las roturas son _backward-compatiblemente_ fijas agregando las restricciones. –
Muchas gracias Daniel, sus respuestas fueron muy útiles. Así que con el nuevo compilador debo asegurarme de que la restricción incluya una ecuación instancia al menos para hacer la comparación. – user1726613