在GHCI中进行检查时可能存在不同类型

时间:2016-09-23 18:58:19

标签: haskell types polymorphism maybe

我是Haskell的新手,并试图自学绳索,如果这是一个基本问题,请原谅我。

如果我打开解释器(ghci),为什么我会得到如下不同的类型:

Just 54 类型是 Just 54 :: Num a => Maybe a

Just 54 :: Maybe Int 类型是 Just 54 :: Maybe Int

Just "Stack" 类型是 Maybe [Char]

我不明白为什么上面的第一个例子会产生Maybe Int以外的类型

1 个答案:

答案 0 :(得分:4)

因为54可以是任何数字类型。尝试例如Just 54 :: Maybe Float

如果你没有指定任何,并且编译器不能选择一个精确的,它将保留最常用的类型 - Num a => Maybe a意味着它可以是任何类型的形式{{1只要Maybe a是数字。

请注意,当您尝试打印时,GHCi会播放一些技巧并为您选择a。这被称为“默认”。否则,输入a并按回车键,我们会收到54,这很不方便。