У меня вопрос о том, как GHCi принимает тип целого числа.
Я читал класс типа "Нет-нет". Узнайте, что вы Haskell.
Вот ссылка, если вы хотите прочитать все это. http://learnyouahaskell.com/making-our-own-types-and-typeclasses#a-yes-no-typeclass
Вкратце, в этой главе показано, что, определяя мой собственный класс, я могу создать функцию, которая работает с большим количеством типов.
В этой книге определяется класс YesNo с функцией
yesno :: a -> Bool
и сделайте Int
в качестве примера класса YesNo
instance YesNo Int where
yesno 0 = False
yesno _ = True
Когда я загрузил это на свой GHCi и набрал
yesno 0
он возвратил ошибку. Я думал, что это, вероятно, потому, что GHCi не может определить, должно ли 0 быть Int
или Integer
или Double
или другим типом в классе Num
. Фактически, когда я набрал yesno (0:: Int), он сработал.
Итак, просто для удовольствия я сделал Integer
как экземпляр класса YesNo
и написал
instance YesNo Integer where
yesno 0 = True
yesno _ = False
(Обратите внимание, что я перевернул True и False) и снова я набрал
yesno 0
(без объявления какого-либо типа), то GHCi показал True
.
Кроме того, когда я набрал
yesno $ fromIntegral 0
он возвратил True
, что означает, что GHCi считает, что тип fromIntegral 0
равен Integer
.
Итак, значит ли это, что когда я просто набираю целое число на GHCi, обычно он принимает значение Integer
вместо? Я запутался, потому что :t 0
возвращает Num a => a