Ho una domanda su come GHCi assume il tipo di un numero intero.Haskell: SìNo digitare classe. Perché integer?
Stavo leggendo Sì-No tipo classe di Learn you a Haskell.
Questo è un collegamento se si desidera leggere il tutto. http://learnyouahaskell.com/making-our-own-types-and-typeclasses#a-yes-no-typeclass
Per dirla in breve, questo capitolo mostra che definendo la mia classe, posso creare una funzione che funzioni con molti tipi.
Questo libro definisce classe YesNo con una funzione
yesno :: a -> Bool
e fare Int
come un'istanza della classe YesNo
instance YesNo Int where
yesno 0 = False
yesno _ = True
Quando ho caricato questo sul mio GHCi e digitato
yesno 0
ha restituito l'errore. Ho pensato che probabilmente è perché GHCi non è in grado di stabilire se 0 è inteso come Int
o Integer
o Double
o altro tipo nella classe Num
. In realtà quando ho digitato yesno (0 :: Int) ha funzionato.
Quindi, solo per divertimento ho fatto Integer
come esempio di YesNo
di classe e ha scritto
instance YesNo Integer where
yesno 0 = True
yesno _ = False
(Si noti che ho capovolto Vero e Falso) e ancora una volta, ho digitato
yesno 0
(senza qualsiasi tipo di dichiarazione) quindi GHCi ha mostrato True
.
Inoltre, quando ho digitato
yesno $ fromIntegral 0
è tornato True
, il che significa che GHCi pensa che il tipo di fromIntegral 0
è Integer
.
Quindi, questo significa che quando digito un numero intero su GHCi, di solito si assume che il suo valore sia Integer
invece di? Sono confuso, perché :t 0
rendimenti Num a => a