我是Haskell的新手,并试图自学绳索,如果这是一个基本问题,请原谅我。
如果我打开解释器(ghci),为什么我会得到如下不同的类型:
Just 54
类型是
Just 54 :: Num a => Maybe a
Just 54 :: Maybe Int
类型是
Just 54 :: Maybe Int
Just "Stack"
类型是
Maybe [Char]
我不明白为什么上面的第一个例子会产生Maybe Int
以外的类型
答案 0 :(得分:4)
因为54
可以是任何数字类型。尝试例如Just 54 :: Maybe Float
。
如果你没有指定任何,并且编译器不能选择一个精确的,它将保留最常用的类型 - Num a => Maybe a
意味着它可以是任何类型的形式{{1只要Maybe a
是数字。
请注意,当您尝试打印时,GHCi会播放一些技巧并为您选择a
。这被称为“默认”。否则,输入a
并按回车键,我们会收到54
,这很不方便。