Для какой-то операции с файлом мне нужно проверить, существует ли файл, был ли он изменен, и только потом выполнять над ним какую-то операцию. Мой код новичка на Haskell выглядит следующим образом (упрощенно):
someFileOp ::FileContents -> FilePath -> IO (FileOpResult)
someFileOp contents absFilePath = do
fileExists <- DIR.doesFileExist absFilePath
if fileExists
then do
isMod <- isModified contents absFilePath
if isMod
then return FileModified
else return $ doSomethingWithFile
else return FileNotFound
Это работает. Однако вложенные выражения if выглядят для меня неправильными - не похожими на FP. Какой идиоматический способ проверить несколько логических условий в IO, а затем предпринять какие-либо действия в зависимости от их результата?
doesFileExist
. Вместо этого поймайте исключение, котороеisModified
выдает, когда оно не существует. В противном случае у вас есть состояние гонки. - person Daniel Wagner   schedule 29.05.2020