2016-09-23 45 views
2

我是Haskell的新手,試圖教自己繩索,所以如果這是一個基本問題,請原諒我。在GHCI中檢查時可能會有不同的類型

如果我打開了解釋器(ghci的),爲什麼會出現不同類型如下:

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

Just 54 :: Maybe Int 類型是 Just 54 :: Maybe Int

Just "Stack" 的類型是 Maybe [Char]

我不理解爲什麼上面的第一個例子中產生比Maybe Int

+0

http://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html#t:Num –

+0

Haskell數字文字是多態的,所以它們可以用來表示任何實現'數字'類型。因此,任何數字文字的類型實際上都是'Num a => a'類型。 –

+0

試試'Prelude>:i Num'並查看它的實例列表。除了'Int'外,至少還有'Integer','Float'和'Double'。 –

回答

4

以外的類型,因爲54可以是任何數字類型的。嘗試Just 54 :: Maybe Float

如果不指定任何,編譯器不能選擇一個精確的一個,它會保持它的最普遍的類型 - Num a => Maybe a意味着它可以是任何類型的形式Maybe a的,只要a是數字。

請注意,當您嘗試打印它時,GHCi會播放一些技巧併爲您選擇a。這被稱爲「違約」。否則,輸入54並按回車,我們會得到Ambiguous type error: (which numeric type?),這很不方便。

相關問題