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 でくるむような形になっています。
これをスマートに記述する方法はあるのでしょうか ?
(怒られないので、調子に乗って質問ばかりさせていただいていますが、これがマナー違反であればご指摘ください)