[英]Ambiguous Types, and Defaults for Overloaded Numeric Operations
import Data.Dynamic
default(Integer,Double)
a :: Num a => a
a = 5
-- show :: Show a => a -> String
-- toDyn :: Typeable a => a -> Dynamic
main :: IO ()
-- main = print $ show a -- *** THIS LINE WORKS WELL
main = print $ toDyn a -- *** THIS LINE LEADS TO AN AMBIGUOUS TYPE ERROR
我不明白為什么第一個“主”版本有效,而不是第二個。 有人可以幫助我嗎? 在此先感謝您的回復。
來自Haskell的報告 :
在發現模糊類型的情況下,如果出現以下情況,則模糊類型變量v是可以違約的:
- v僅出現在C v形式的約束中,其中C是一個類,並且
- 這些類中至少有一個是數字類(即
Num
或Num
的子類Num)
,和- 所有這些類都在Prelude或標准庫中定義
您的示例失敗,因為與Show
不同, Typeable
不是第三點中指定的類之一,因此不執行默認操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.