在 GHCI 中检查时的不同 Maybe 类型

Different Maybe Types When Inspecting in GHCI

我是 Haskell 的新手,正在尝试自学,如果这是一个基本问题,请原谅我。

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

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

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

Just "Stack" 类型是 Maybe [Char]

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

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

如果您不指定任何类型,并且编译器无法选择一个精确的类型,它将为其保留最通用的类​​型 -- Num a => Maybe a 表示它可以是任何形式的类型 Maybe a,只要 a 是数字。

请注意,当您尝试打印它时,GHCi 会使用一些技巧并为您选择 a。这叫做"defaulting"。否则输入54回车,会得到Ambiguous type error: (which numeric type?),很不方便。