on 0.11.3.0 help sign in
34 lines 999 B history raw
1{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
2{-# OPTIONS_GHC -fno-warn-orphans #-}
4import Control.DeepSeq
5import Control.Monad
6import Text.JSON
7import Data.Time.Clock
8import System.Environment (getArgs)
10instance NFData JSValue where
11 rnf JSNull = ()
12 rnf (JSBool b) = rnf b
13 rnf (JSRational b r) = rnf b `seq` rnf r `seq` ()
14 rnf (JSString s) = rnf (fromJSString s)
15 rnf (JSArray vs) = rnf vs
16 rnf (JSObject kvs) = rnf (fromJSObject kvs)
18main :: IO ()
19main = do
20 (cnt:args) <- getArgs
21 let count = read cnt :: Int
22 forM_ args $ \arg -> do
23 putStrLn $ arg ++ ":"
24 start <- getCurrentTime
25 let loop !good !bad
26 | good+bad >= count = return (good, bad)
27 | otherwise = do
28 s <- readFile arg
29 case decodeStrict s of
30 Ok (_::JSValue) -> loop (good+1) 0
31 _ -> loop 0 (bad+1)
32 (good, _) <- loop 0 0
33 end <- getCurrentTime
34 putStrLn $ " " ++ show good ++ " good, " ++ show (diffUTCTime end start)