[英]In Haskell, is there a good way to write a num to num conversion function `toNum :: (Num a, Num b) => a -> b`?
[英]Integer to Num conversion in Haskell
我只是在玩 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 的任何實例。
(+) :: Num a => a -> a -> a
表示兩個操作數和結果都具有相同的類型。 因此,這意味着對於表達式a + 1
因為a
是一個Integer
,這意味着1
和a + 1
也是Integer
s。
但是,您的函數承諾,對於Num a
a
所在的任何類型a
,它都可以構造一個將Integer
映射到該類型a
的對象的函數。 所以它可以是一個Integer
, Int
, Double
等。
您可以使用fromInteger :: Num a => Integer -> a
函數將結果轉換為任何Num
類型:
fun :: Num a => Integer -> a
fun = fromInteger (a + 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.