@@ -1,4 +1,4 @@
1−{-# LANGUAGE BangPatterns, OverloadedStrings #-}
1+{-# LANGUAGE BangPatterns, CPP, OverloadedStrings #-}
22
33import Control.Exception
44import Control.Monad
@@ -8,35 +8,36 @@ import Data.Time.Clock
88import System.Environment (getArgs)
99import System.IO
1010import qualified Data.ByteString as B
11−import qualified Data.ByteString.Lazy as L
12−import qualified Data.ByteString.Lazy.Internal as L
1311import Control.DeepSeq
1412
13+#if !MIN_VERSION_bytestring(0,10,0)
14+import qualified Data.ByteString.Lazy.Internal as L
15+
1516instance NFData L.ByteString where
1617 rnf = go
1718 where go (L.Chunk _ cs) = go cs
1819 go L.Empty = ()
1920 {-# INLINE rnf #-}
21+#endif
2022
23+main :: IO ()
2124main = do
2225 (cnt:args) <- getArgs
2326 let count = read cnt :: Int
2427 forM_ args $ \arg -> bracket (openFile arg ReadMode) hClose $ \h -> do
2528 putStrLn $ arg ++ ":"
2629 let refill = B.hGet h 16384
27− result <- parseWith refill json =<< refill
28− r <- case result of
29− Done _ r -> return r
30− _ -> fail $ "failed to read " ++ show arg
30+ result0 <- parseWith refill json =<< refill
31+ r0 <- case result0 of
32+ Done _ r -> return r
33+ _ -> fail $ "failed to read " ++ show arg
3134 start <- getCurrentTime
3235 let loop !n r
3336 | n >= count = return ()
3437 | otherwise = {-# SCC "loop" #-} do
35− case result of
36− Done _ r -> rnf (encode r) `seq` loop (n+1) r
37− _ -> error $ "failed to read " ++ show arg
38− loop 0 r
38+ rnf (encode r) `seq` loop (n+1) r
39+ loop 0 r0
3940 delta <- flip diffUTCTime start `fmap` getCurrentTime
4041 let rate = fromIntegral count / realToFrac delta :: Double
4142 putStrLn $ " " ++ show delta
42− putStrLn $ " " ++ show (round rate) ++ " per second"
43+ putStrLn $ " " ++ show (round rate :: Int) ++ " per second"