[英]Regarding Haskell type classes (Num vs Read)
有人可以解釋我在這里缺少的東西:
Prelude> :t read
read :: (Read a) => String -> a
Prelude> read "4"
<interactive>:1:0:
Ambiguous type variable `a' in the constraint:
`Read a' arising from a use of `read' at <interactive>:1:0-7
Probable fix: add a type signature that fixes these type variable(s)
read "4"
引發錯誤,因為ghci不知道我們想要哪種具體類型,它只知道我們有一個Read
類。 read "4" :: Int
工作正常。 這對我來說很清楚。
現在,按照上面的邏輯,我期望從fromIntegral 4
中引發一個錯誤:
Prelude> :t fromIntegral
fromIntegral :: (Integral a, Num b) => a -> b
Prelude> fromIntegral 4
4
但是,它工作正常。 為什么在這種情況下不需要類型注釋? 我預計上述情況會失敗; 而且只有
Prelude> fromIntegral 4 :: Int
上班。
注意 - 我正在閱讀“讓你學習哈斯克爾以獲得巨大的利益”並且已經涵蓋到第5章了。我在第7章(或其他章節)中討論的是什么?
謝謝。
區別在於read可能會導致任何類型,而fromIntegral會產生一個數字。 關於ghci中的數字有一些默認值,因此ghci可以使用默認類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.