[Haskell-cafe] (Read r) => IO (Maybe r)

Jacek Generowicz jacek.generowicz at cern.ch
Fri Dec 17 13:59:10 CET 2010


Hi,

What are some interesting, idiomatic ways of writing something similar  
to the following, using

a) Only standard utilities

b) Non-standard utilities


getValidatedInteger = do
   maybeInt <- maybeGet
   case maybeInt of
     Just int -> return int
     Nothing  -> do putStrLn "That doesn't seem to be an integer. Try  
again."
                    getValidatedInteger

maybeGet :: (Read r) => IO (Maybe r)
maybeGet = getLine >>= return . maybeReadS

maybeReadS text =
     case reads text  of
       [(int, rest)] | all (== ' ') rest -> Just int
       _                                 -> Nothing




More information about the Haskell-Cafe mailing list