簡體   English   中英

Haskell 中的整數到 Num 轉換

[英]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 ,這意味着1a + 1也是Integer s。

但是,您的函數承諾,對於Num a a所在的任何類型a ,它都可以構造一個將Integer映射到該類型a的對象的函數。 所以它可以是一個IntegerIntDouble等。

您可以使用fromInteger :: Num a => Integer -> a函數將結果轉換為任何Num類型:

fun :: Num a => Integer -> a
fun = fromInteger (a + 1)

暫無
暫無

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

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