开发者

Haskell - "How can I use "if" statement in "do" block properly? [duplicate]

开发者 https://www.devze.com 2023-03-03 08:30 出处:网络
This question already has answers here: Closed 11 years ago. Possible Duplicate: Haskell “do nothing” IO, or if without else
This question already has answers here: Closed 11 years ago.

Possible Duplicate:

Haskell “do nothing” IO, or if without else

Something got wrong in these "easy" lines ...

action = do
    isdir <- doesDirectoryExist path  -- check if directory ex开发者_高级运维ists.
    if(not isdir)                     
        then do handleWrong
    doOtherActions                    -- compiling ERROR here.

GHCi will complaint about identifiers , or do not exec the last line action after I add else do .

I think exception handling may work, but is it necessary in such common "check and do something" statements ?

Thanks.


if in Haskell must always have a then and an else. So this will work:

action = do
    isdir <- doesDirectoryExist path
    if not isdir
        then handleWrong
        else return ()     -- i.e. do nothing
    doOtherActions

Equivalently, you can use when from Control.Monad:

action = do
    isdir <- doesDirectoryExist path
    when (not isdir) handleWrong
    doOtherActions

Control.Monad also has unless:

action = do
    isdir <- doesDirectoryExist path
    unless isdir handleWrong
    doOtherActions

Note that when you tried

action = do
    isdir <- doesDirectoryExist path
    if(not isdir)
        then do handleWrong
        else do
    doOtherActions

it was parsed as

action = do
    isdir <- doesDirectoryExist path
    if(not isdir)
        then do handleWrong
        else do doOtherActions
0

精彩评论

暂无评论...
验证码 换一张
取 消