Mam pytanie, w jaki sposób GHCi przyjmuje typ liczby całkowitej.Haskell: YesNo type class. Dlaczego Integer?
Czytałem Tak-Nie, klasa typu Ucz się Haskella.
Oto link, jeśli chcesz przeczytać całość.
Krótko mówiąc, ten rozdział pokazuje, że definiując własną klasę, mogę utworzyć funkcję, która działa z wieloma typami.
Książka ta określa klasę TakNie z funkcją
yesno :: a -> Bool
i uczynić Int
jako instancja klasy TakNie
instance YesNo Int where
yesno 0 = False
yesno _ = True
Kiedy załadowany to na moim GHCi i wpisane
yesno 0
zwrócił błąd. Pomyślałem, że to prawdopodobnie dlatego, że GHCi nie może stwierdzić, czy 0 ma być Int
lub Integer
lub Double
lub inny typ w klasie Num
. Właściwie kiedy wpisałem yesno (0 :: Int), zadziałało.
Więc po prostu dla zabawy zrobiłem Integer
jako przykład YesNo
klasy i napisał
instance YesNo Integer where
yesno 0 = True
yesno _ = False
(zauważ, że ja przerzucona prawda i fałsz) i znowu, Wpisałem
yesno 0
(bez dowolna deklaracja typu), następnie GHCi pokazał True
.
Ponadto, gdy wpisałem
yesno $ fromIntegral 0
powrócił True
, co oznacza, że GHCi myśli rodzaj fromIntegral 0
jest Integer
.
Czy oznacza to, że kiedy po prostu wpisuję liczbę całkowitą w GHCi, zazwyczaj przyjmuje ona wartość: Integer
zamiast? Jestem zdezorientowany bo :t 0
zwrotów Num a => a