2017-06-28 73 views
5

我有以下匿名函數:Haskell如何將整數文字轉換爲不同的類型?

*Exercises> g = \(Sum n) -> Sum (n - 1) 

我用它喜歡:

*Exercises> g (Sum 56) 
Sum {getSum = 55} 
*Exercises> g 56 
Sum {getSum = 55} 

第二個例子,編譯器如何轉換56Sum 56

在前奏中,我看到SumNum的實例,但不清楚轉換。

回答

8

當Haskell看到一個整數文字(如56)時,它將其解釋爲fromInteger 56fromInteger的類型爲Num a => Integer -> a,所以此代碼的類型爲Num a => a。 (任何類型,這裏叫做a,這是Num類的成員。)

這意味着,當你在哪裏Num成員預計上下文(Sum你的情況)使用它,它就會「設置「aSum,並選擇Integer -> Sum類型的fromInteger版本。因此fromInteger 56 :: Sum

相關問題