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