Questa funzione:Num vs integrale
hola :: (Integral a) => a -> String
hola 1 = "OK"
hola _ = "asdf"
funziona bene. Ma questo:
hola :: (Num a) => a -> String
hola 1 = "OK"
hola _ = "asdf"
non può essere compilato: "Impossibile dedurre (Eq a) derivante dalla letterale` 1' "
Io davvero non capisco. Sto leggendo un tutorial dove è detto
"Integral è anche un typeclass numerico. Num comprende tutti i numeri, compresi i numeri reali e numeri interi, Integral include solo numeri interi (interi). In questo typeclass sono Int e Numero intero." http://learnyouahaskell.com/types-and-typeclasses
Perché non posso utilizzare Num?
Lavorare nella versione precedente :) Grazie !! Penso che questo cambiamento faccia un po 'confondere questo linguaggio. :( – user1726613
Beh, causerà sicuramente molta confusione (e la rottura dei pacchetti) nel periodo di transizione, ma il consenso generale è che il guadagno è maggiore della perdita (non più spurie 'Eq' e' Show' per cose come funzioni che possono avere istanze 'Num' sensibili ad eccezione dei vecchi requisiti' Eq' e 'Show'.) Lo stesso (mutatis mutandis) si applica alla rimozione di' Num. Superclasse da 'Bits' .Per fortuna, le rotture sono _backward-compatibilmente_ corrette aggiungendo i vincoli –
Grazie mille Daniel, le tue risposte sono state molto utili.Così con il nuovo compilatore devo assicurarmi che il vincolo includa un Eq istanza almeno per fare il confronto – user1726613