後にアクションを実行するとIO Bool
テストのリストを実行して、私はその機能を持っている場合Bool
のいずれかがFalse
ハスケル:単一故障
であれば最後にアクションを実行するための最良の方法は何ですか指定したファイルがディレクトリに存在するかどうかを確認し
check :: FilePath -> IO()
check s = do
r <- doesFileExist s
putStrLn s ++ if r then " exists" else " does not exist"
私は、ファイルのリストをチェックして、すべてのテストに合格した場合に応じて、最後に別の機能を実行できるようにしたいと思います
?これは、常にすべてのテストを実行します
import Control.Monad
check :: FilePath -> IO Bool
check = undefined
process files = do
allok <- foldM (\b f -> fmap (b &&) (check f)) True files
if allok then putStrLn "All OK" else putStrLn "Oops"
注:私は私はこのようなfoldM
を使用することになり
allPassed = do
l <- mapM doesFileExist [`list of files`]
if all (==True) l then "all ok" else "meh"
だから、 'allM'機能、ALL''のモナドと同等のようなものを探していますか? –
私のお勧め:気にしないでください。あなたがファイルを使ってやりたいことを行い、存在しなければ例外をキャッチしてください。結局のところ、このチェックの実行と次のステップの実行との間に存在しなくなる可能性があるため、堅牢なプログラムが必要な場合は、例外を処理する必要があります。 –
OPのアプリケーションはわかりませんが、「明白な」理由で失敗することがないように、高価で時間のかかる作業に着手する前に「飛行前チェック」を実行することが望ましい場合があります。 – ErikR