
S. Alexander Jacobson wrote:
My point is that I am reading in name/value pairs and once I know the name, I know the type of the value, but I don't want to have to pass that information programatically to the point in the code where I am doing the read.
OK, I see... I don't know the exact syntax you are using (e.g. how are the strings terminated?), but "reads" is still useful: readIS :: ReadS (Either Integer String) readIS s = take 1 $ [ (Left x, t) | (x, t) <- reads s ] ++ [ (Right x, t) | (x, t) <- lex s ] Then we have: Main> readIS "123blah" [(Left 123,"blah")] Main> readIS "blah123" [(Right "blah123","")] Main> readIS "" [(Right "","")] Main> readIS "foo bar" [(Right "foo"," bar")] If you have only simple parsing tasks and are not looking for extreme performance, the Read class is a good choice. Otherwise you should probably have a look at the Parsec package which comes with Hugs and GHC: http://www.haskell.org/ghc/docs/latest/html/libraries/parsec/Text.ParserComb... or Happy: http://haskell.org/happy/ Cheers, S.