IO モナドにハマってますヽ(  ̄д ̄;)ノ - 女子高生ぷろぐらまーなお☆のブログ
id:nobsunさんがとあるプログラム - HaHaHa!(old) - haskellで書いてくださっているので、僕が書くのはおせっかいな気がしますが、まぁ参考まで。んー、あんまりid:nobsunさんと変わらないかも(id:nobsunさんのは、setCurrentDirectoryが一箇所足りないような気がします…)。
あ、このプログラムはWindows限定です。パスセパレータの処理をサボっています。
module Main (main) where import Data.List (isSuffixOf) import System.Directory (getModificationTime, getDirectoryContents) import System.Environment (getArgs) import System.Time (ClockTime) data Entry = Entry { path :: FilePath, timestamp :: ClockTime, title :: String, body :: [String] } deriving Show getFileEntry :: FilePath -> FilePath -> IO Entry getFileEntry dir file = do let path = dir ++ "\\" ++ file mtime <- getModificationTime path cs <- readFile path return $ case lines cs of [] -> Entry path mtime "" [] (t : bs) -> Entry path mtime t bs getTextFileEntries :: FilePath -> String -> IO [Entry] getTextFileEntries dir ext = mapM (getFileEntry dir) . filter (isSuffixOf ext) =<< getDirectoryContents dir main :: IO () main = mapM_ (putStrLn . title) =<< (uncurry getTextFileEntries) . parseArgs =<< getArgs where parseArgs [] = ("data", ".txt") parseArgs [dir] = (dir, ".txt") parseArgs (dir : ext : _) = (dir, '.' : ext)