on 0.3.1.1 help sign in
typeable/aeson/benchmarks/AesonParse.hs
31 lines 960 B history raw
1{-# LANGUAGE BangPatterns, OverloadedStrings #-}
3import Control.DeepSeq
4import Control.Exception
5import Control.Monad
6import Data.Aeson
7import Data.Aeson.Parser
8import Data.Attoparsec
9import Data.Time.Clock
10import System.Environment (getArgs)
11import System.IO
12import qualified Data.ByteString as B
14main = do
15 (cnt:args) <- getArgs
16 let count = read cnt :: Int
17 forM_ args $ \arg -> bracket (openFile arg ReadMode) hClose $ \h -> do
18 putStrLn $ arg ++ ":"
19 start <- getCurrentTime
20 let loop !good !bad
21 | good+bad >= count = return (good, bad)
22 | otherwise = do
23 hSeek h AbsoluteSeek 0
24 let refill = B.hGet h 16384
25 result <- parseWith refill json =<< refill
26 case result of
27 Done _ r -> loop (good+1) bad
28 _ -> loop good (bad+1)
29 (good, _) <- loop 0 0
30 end <- getCurrentTime
31 putStrLn $ " " ++ show good ++ " good, " ++ show (diffUTCTime end start)