2014-09-13 9 views
5

Ho appena iniziato a Haskell, e ho cercato di fare un semplice tipo di dati Number, che ha un unico Int in questo modo:Ottenere "no parse" da Prelude.read

data Number 
    = Num Int 
    deriving (Read, Show) 

Ho poi ha provato a fare read "1234" :: Number sperando che avrebbe dato qualcosa come Num 1234, ma mi sembra di ottenere un "Eccezione: Prelude.read: no parse" invece. C'è qualcos'altro che mi manca?

risposta

9

L'istanza che si ottiene darebbe read "Num 1234" = Num 1234.

questo è il comportamento che ci si aspetta per le istanze di Read, ma se si vuole veramente un comportamento diverso, si dovrà implementare read per Number te stesso (si può riutilizzare Int 's, però).

+5

+1 - @ Sp3000 dovresti vedere questo come una sorta di inverso per 'show' – Carsten

+0

Grazie ragazzi, che ha molto più senso – Sp3000