2014-05-07 95 views
6

當我遇到一個函數時,是否有一種通用的方法來確定它是完全獨立的還是類型類的一部分?例如:確定函數是獨立函數還是類型類的一部分

fromIntegral :: (Integral a, Num b) => a -> b 

這是我開發找到答案的方法:

  1. 轉到GHCI和所有列出類的限制做:info,在這種情況下:info Integral:info Num
  2. 檢查是否有任何人列出了該功能。
  3. 如果是這樣,它是該類型的一部分。如果沒有,它是一個獨立的功能(forIntegral就是這種情況)。

我的方法是否正常?它一般工作嗎?

回答

12

您可以直接在函數上執行:info

Prelude> :info fromInteger 
class Num a where 
    ... 
    fromInteger :: Integer -> a 
     -- Defined in `GHC.Num' 

Prelude> :info fromIntegral 
fromIntegral :: (Integral a, Num b) => a -> b 
     -- Defined in `GHC.Real' 

正如你看到的,fromInteger屬於Num類型類,而fromIntegral沒有。

7

還有一個更簡單的方法,比較的輸出差異爲:info fromIntegral:info fromInteger

> :info fromIntegral 
fromIntegral :: (Integral a, Num b) => a -> b 
     -- Defined in `GHC.Real' 
> :info fromInteger 
class Num a where 
    ... 
    fromInteger :: Integer -> a 
     -- Defined in `GHC.Num' 

fromInteger如何指定爲類型類的一部分,但fromIntegral是不是?這就是你可以說的。

相關問題