18

So let's say you have a variable n.

You want to check if its an integer, or even better yet check what type it is.

I know there is a function in haskell, isDigit that checks if it is a char.

However is there a function that checks if n is in integer, or even better, gives the type of n?

Russia Must Remove Putin
  • 374,368
  • 89
  • 403
  • 331
Jake
  • 2,877
  • 8
  • 43
  • 62

2 Answers2

21

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

But you should think about your code, this is not very much like Haskell should be, and it probably is not what you want.

edon
  • 722
  • 5
  • 8
  • Given that he mentioned `isDigit`, I think he wants to check whether a string represents an integer - not whether a given variable *is* an integer, even though that's what the title said. Also your type signature is wrong: you're missing the `Typeable` constraint. – sepp2k Nov 09 '10 at 13:21
  • 24
    This is almost always a wrong approach. It looks like the poster is a Haskell beginner, and we should try to understand his problem better, not give solutions like this. – Chris Eidhof Nov 09 '10 at 16:51
16

If you are using an interactive Haskell prompt (like GHCi) you can type :t <expression> and that will give you the type of an expression.

e.g.

Prelude> :t 9

gives

9 :: (Num t) => t

or e.g.

Prelude> :t (+)

gives

(+) :: (Num a) => a -> a -> a
Matt Ellen
  • 11,268
  • 4
  • 68
  • 90