
Am Dienstag 02 Februar 2010 22:20:03 schrieb kane96@gmx.de:
Hi, how can I write an action getInt :: IO Int that works like getLine :: IO String but for Int instead of String. I know that I can read the input with getLine and then convert it by using read, but don't know how to write it as an action. I tried getInt :: IO Int getInt read <- getLine but that doesn't work.
There are many possibilities. The shortest is getInt :: IO Int getInt = readLn another short and sweet is getInt :: IO Int getInt = fmap read getLine -- or liftM read getLine But neither of these deals well with malformed input, if that's a possibility to reckon with, use e.g. the reads function getInt :: IO Int getInt = do inp <- getLine case reads inp of ((a,tl):_) | all isSpace tl -> return a _ -> handle malformed input