簡體   English   中英

模糊類型和重載數值運算的默認值

[英]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是一個類,並且
  • 這些類中至少有一個是數字類(即NumNum的子類Num) ,和
  • 所有這些類都在Prelude或標准庫中定義

您的示例失敗,因為與Show不同, Typeable不是第三點中指定的類之一,因此不執行默認操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM