Haskell プログラムらしい書き方について質問させてください
引数で指定したディレクトリから、閾値以下のサイズのファイル・パスを取得する関数を書きました。
想定通りに動作することを確認しました。
上記のコードでは、`try (listDirectory dir)` が Either a b を戻すため、それを case で判定して
また Left や Right でくるむような形になっています。
これをスマートに記述する方法はあるのでしょうか ?
(怒られないので、調子に乗って質問ばかりさせていただいていますが、これがマナー違反であればご指摘ください)
import Control.Exception import Control.Monad import System.Directory import System.Posix.Files import System.Posix.Types lessThan :: FileOffset -> FilePath -> IO Bool lessThan threshold path = do s <- getFileStatus path return $ and [isRegularFile s, fileSize s < threshold] smallFiles :: FileOffset -> FilePath -> IO (Either String [FilePath]) smallFiles threshold dir = do ei <- try (listDirectory dir) case ei of Left (e::SomeException) -> return $ Left (displayException e) Right contents -> do paths <- filterM (lessThan threshold) contents return $ Right paths
引数で指定したディレクトリから、閾値以下のサイズのファイル・パスを取得する関数を書きました。
ghci> smallFiles 100 "." Right ["retry.hs",".gitignore","oop.hs"] it :: Either String [FilePath]
想定通りに動作することを確認しました。
上記のコードでは、`try (listDirectory dir)` が Either a b を戻すため、それを case で判定して
また Left や Right でくるむような形になっています。
これをスマートに記述する方法はあるのでしょうか ?
(怒られないので、調子に乗って質問ばかりさせていただいていますが、これがマナー違反であればご指摘ください)