久々にHaskellの練習
Haskellで外部実行ファイルの実行時間を調べる。つづき - 妄想宝箱
やっぱりshowTimeが長い。
http://d.hatena.ne.jp/coppieee/20090426/1240748315
ということで,久々にHaskell書いた.
module Main where import System import System.Process import Time main = do args <- getArgs start <- getClockTime wait $ unwords args end <- getClockTime putStrLn $ showTime $ diffClockTimes end start wait :: String -> IO ExitCode wait = (>>= waitForProcess) . runCommand {- showTime :: TimeDiff -> String showTime (TimeDiff year month d h m s p) = showNonZero year "year " ++ showNonZero month "month " ++ showNonZero d "d " ++ showNonZero h "h " ++ show m ++ "m "++ show s ++ "s " ++ (show $ div p 1000000000) ++ "ms" -} showTime :: TimeDiff -> String showTime (TimeDiff year month d h m s p) = concat $ map (uncurry showNonZero) [(year, "year "), (month, "month ") ,(d, "d ") ,(h, "h ")] ++ map (\(x, y) -> show x ++ y) [(m, "m "), (s, "s "), (fromInteger $ div p 1000000000, "ms")] showNonZero :: (Num a) => a -> String -> String showNonZero 0 _ = "" showNonZero x unit = show x ++ unit
showTime以外はid:coppieeeからそのまま.
mapでどうしていいか解らなかったので,uncurryを使うはめになったけど,showNonZeroを書き換えればいいことに気付いた.まぁ,今回はshowTimeだけ書き換えるということでこんな感じで.
あんまり短くはなってない気がする.
行が長いとき,どこで改行すればいいのかよくわからない.