That works, but is probably not what you want. You can use the lex 
function to parse identifiers not enclosed in quotes:
 
 > instance Read Mark where
 >   readsPrec _ str = [(Mark x, t') | ("mark",t) <- lex str,
 >                                     (x,t') <- reads t
 

I played a bit around with lex function and it seems that under certain circumstances it doesn’t read the string of token properly

 

For e.g.

 

 

-- IP address

 

*Mark> lex "192.168.0.1"

[("192.168",".0.1")]

 

-- digit + char

 

Also lex “8021p”   output is

 

*Mark> lex "8021p"

[("8021","p")]

 

Is there any other lex variant available?  Or should I switch to using Parsec library, in that case, will I still be able to use it with Read instances? If so, how?

 

Anurag