我有一个关于如何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