我有一個關於如何GHCi假定整數的類型的問題。Haskell:是沒有類型的類。爲什麼是整數?
我在讀Yes-No type class瞭解你一個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
類的一個實例,寫
(請注意,我翻true和false) 又一次,我打字
yesno 0
(不任何類型的聲明),那麼GHCi顯示True
。
而且,當我輸入
yesno $ fromIntegral 0
它返回True
,這意味着GHCI認爲的fromIntegral 0
類型是Integer
。
那麼,這是否意味着,當我剛鍵入GHCI一個整數,它通常假定它的值是在代替Integer
?我很困惑,因爲3210回報Num a => a