[Haskell-beginners] cascade of if statements

Emmanuel Touzery etouzery at gmail.com
Wed Oct 31 11:27:34 CET 2012


hmm otherwise the return False must be a return True, stupid bug:

-- don't re-fetch if I fetched in the last 2 hours
needToFetchAgain :: FilePath -> IO Bool
needToFetchAgain export_filename = do
    exists <- doesFileExist export_filename
    if (not exists)
        then return True
        else do
            modif <- getModificationTime export_filename
            curTime <- getClockTime
            let diff = diffClockTimes curTime modif
            return $ tdSec diff >= (3600*2) -- 2 hours


On Wed, Oct 31, 2012 at 11:25 AM, Emmanuel Touzery <etouzery at gmail.com>wrote:

> Hello,
>
>  I am wondering if this code can be made a bit nicer?
>
>  I am checking if a file exists... and then if it exists I'm checking
> whether it's older than two hours from now. It is a bit annoying to have
> that second block in the else (i could make a second function but i think
> it all belongs in this function).
>
>  This structure makes me think about the Maybe monad, where it would
> automatically exit after it would find out that the file doesn't exists,
> instead of having a cascade of if statements inside one another.
>
>  But this function is already in the IO monad (maybe I'm thinking about
> this in the wrong way though).
>
>  Any idea for an improvement?
>
> -- don't re-fetch if I fetched in the last 2 hours
> needToFetchAgain :: FilePath -> IO Bool
> needToFetchAgain export_filename = do
>     exists <- doesFileExist export_filename
>     if (not exists)
>         then return False
>         else do
>             modif <- getModificationTime export_filename
>             curTime <- getClockTime
>             let diff = diffClockTimes curTime modif
>             return $ tdSec diff >= (3600*2) -- 2 hours
>
> Thank you!
>
> Emmanuel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20121031/3fa25d56/attachment.htm>


More information about the Beginners mailing list