2010-11-09 9 views
12

Quindi supponiamo di avere una variabile n.Haskell: verifica se numero intero o controlla il tipo di variabile

Si desidera verificare se è un numero intero o, meglio ancora, controllare di che tipo si tratta.

So che esiste una funzione in haskell, isDigit che controlla se si tratta di un carattere.

Tuttavia esiste una funzione che verifica se n è in numero intero o, meglio ancora, restituisce il tipo di n?

risposta

10

Se si utilizza un prompt Haskell interattivo (come GHCi), è possibile digitare :t <expression> e questo darà il tipo di espressione.

ad es.

Prelude> :t 9 

9 :: (Num t) => t 

o ad esempio

Prelude> :t (+) 

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

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

Ma si dovrebbe pensare di codice, questo non è molto simile a Haskell dovrebbe essere, e probabilmente non è quello che volete.

+0

Dato che ha menzionato 'isDigit', penso che voglia controllare se una stringa rappresenta un intero - non se una variabile data * è * un numero intero, anche se è quello che dice il titolo. Anche la tua firma di tipo è sbagliata: ti manca il vincolo 'Typeable'. – sepp2k

+14

Questo è quasi sempre un approccio sbagliato. Sembra che il poster sia un principiante di Haskell, e dovremmo cercare di capire meglio il suo problema, non dare soluzioni come questa. –

Problemi correlati