在这些“简单”的行中出了点问题......
action = do
isdir <- doesDirectoryExist path -- check if directory exists.
if(not isdir)
then do handleWrong
doOtherActions -- compiling ERROR here.
GHCi会投诉标识符,或者在我添加else do
后不执行最后一行操作。
我认为异常处理可能有效,但是在这种常见的“检查和做某事”声明中是否有必要?
感谢。
答案 0 :(得分:31)
if
必须始终有then
和else
。所以这将有效:
action = do
isdir <- doesDirectoryExist path
if not isdir
then handleWrong
else return ()
doOtherActions
等效地,您可以使用Control.Monad中的when
:
action = do
isdir <- doesDirectoryExist path
when (not isdir) handleWrong
doOtherActions
Control.Monad也有unless
:
action = do
isdir <- doesDirectoryExist path
unless isdir handleWrong
doOtherActions
请注意,当您尝试
时action = do
isdir <- doesDirectoryExist path
if(not isdir)
then do handleWrong
else do
doOtherActions
它被解析为
action = do
isdir <- doesDirectoryExist path
if(not isdir)
then do handleWrong
else do doOtherActions