我只是在玩 Haskell 型別類,我發現了一個我無法理解的錯誤。
這是重現它的代碼:
fun :: (Num a) => Integer -> a
fun a = a 1
錯誤:
Couldn't match expected type ‘a’ with actual type ‘Integer’
現在,據我所知,Integer 是Num Typeclass 的一個實體,Integer 型別滿足 Num 定義的所有要求。這種轉換是不允許的嗎?這不是使用創建型別類的重點,即“a”是型別類 Num 的任何實體。
uj5u.com熱心網友回復:
這( ) :: Num a => a -> a -> a意味著兩個運算元和結果都具有相同的型別。因此,這意味著對于運算式a 1since ais an Integer,它也意味著 that1和a 1are Integers 。
但是你的功能承諾,對于任何型別的a地方Num a舉行,它可以構造一個映射功能Integer,以該型別的物件a。所以這可以是一個Integer,Int,Double,等。
您可以使用該fromInteger :: Num a => Integer -> a函式將結果轉換為任何Num型別:
fun :: Num a => Integer -> a
fun = fromInteger (a 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359167.html
下一篇:使用Haskell的Control.Monad.Random.Class.fromList和System.Random
