2010-11-09 61 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