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
精彩评论