2010-11-09 123 views
12

假設你有一個變量n。Haskell:檢查整數或變量的檢查類型

你想檢查它是否是一個整數,或者更好的檢查它是什麼類型。

我知道haskell中有一個函數,isDigit檢查它是否是char。

但是有沒有函數檢查n是否是整數,甚至更好,給出了n的類型?

回答

10

如果您使用的是交互式Haskell提示(如GHCi),則可以輸入:t <expression>,這將爲您提供表達式的類型。

例如

Prelude> :t 9 

給出

9 :: (Num t) => t 

或例如

Prelude> :t (+) 

(+) :: (Num a) => a -> a -> a 
18

import Data.Typeable 
isInteger :: (Typeable a) => a -> Bool 
isInteger n = typeOf n == typeOf 1 

但是,你應該想想你的代碼,這是不是很喜歡哈斯克爾是應該的,它可能不是你想要的。

+0

考慮到他提到'isDigit',我想他想檢查一個字符串是否代表一個整數 - 而不是一個給定的變量*是一個整數,儘管這是標題所說的。你的類型簽名也是錯誤的:你錯過了Typeable約束。 – sepp2k 2010-11-09 13:21:24

+14

這幾乎總是一個錯誤的方法。它看起來像海報是一個Haskell初學者,我們應該嘗試更好地理解他的問題,而不是像這樣的解決方案。 – 2010-11-09 16:51:53