我剛剛使用haskell 作為計算器,期望得到一些關于數字文字型別實體歧義的神秘錯誤訊息。卻一無所獲。
例如在 ghci
> :t 1
1 :: Num p => p
> print 1
1
print 1我期望像破壞 xD這樣的代碼似乎很瘋狂。但是這里ghci需要使用一些Show類的實作。也在1運行時以某種方式表示。使用什么表示,為什么不要求我指定型別?
類似的例子:
> 7*15 2
107
該運算式具有一般Num a => a型別,但經過計算,因此需要選擇某種型別。是整數嗎?這種行為當然是有道理的,但它是如何作業的呢?
鍵入 eg print $ 5 ^ 5 ^ 5(在 Int 范圍之外)會列印正確的數字,所以我猜它是Integer而不是Int。
我還沒有找到任何通用Num a => Show a實體,而是像 Int 這樣的型別的實作是特定于它們的。
我已經在8.8.4、7.10.3和9.0.2版本中使用 ghc 進行了測驗。提前致謝!
uj5u.com熱心網友回復:
Haskell 有一個型別默認機制,以避免必須指定您鍵入的每個數字文字的型別。的默認型別Num是Integer,而對于Fractional(帶小數點的文字)它是Double. 您可以使用頂級默認宣告更改這些默認值。本文解釋了默認規則
uj5u.com熱心網友回復:
該運算式具有一般
Num a => a型別,但經過計算,因此需要選擇某種型別。是Integer嗎?這種行為當然是有道理的,但它是如何作業的呢?
Haskell 使用型別默認值,并且Num a => a型別的默認值確實是Integer. 由于Integer它也是型別類的成員Show,因此它仍然會使用Integer并且print $ 5 ^ 5 ^ 5確實會使用的Integer實體Show來列印值。
uj5u.com熱心網友回復:
默認默認值為(Integer, Double). 報告中的更多資訊。您可能還想了解ExtendedDefaultRules; 值得注意的是,這在 ghci 中是默認開啟的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431378.html
上一篇:在Powershell中運行這個Haskell代碼什么都不做
下一篇:術語級別的種類的種類模式匹配
