[Haskell-cafe] A Question about the IO type detection

Frerich Raabe raabe at froglogic.com
Fri Feb 13 12:09:02 UTC 2015


On 2015-02-13 13:00, Zongzhe Yuan wrote:
> i meet a problem when i was using readLn to read a int from user
> 
> my function is like that
> 
> do (some thing else that is working)
>      n <- readLn
>      (some thing else)
>      f n x1 x2 x3 ……
> 
> f has the type of Int -> something else
> because the type in this function is fixed, if the type of n is not Int, it 
> will have exception
> However i want to detect whether the user input is valid or not

[..]

> How could i solve this problem?

readLn is a bit harsh when it comes to error reporting. You could use
getLine to read a string and then use readMaybe (in Text.Read) to see whether
it's a valid integer. Like:

   main = do
       s <- getLine
       case readMaybe s :: Maybe Int of
           Just i  -> f i
           Nothing -> putStrLn "Ouch!"

-- 
Frerich Raabe - raabe at froglogic.com
www.froglogic.com - Multi-Platform GUI Testing


More information about the Haskell-Cafe mailing list