1{-# LANGUAGE NoImplicitPrelude #-} 2 3module Main (main) where 4 5import Prelude.Compat 6 7import Criterion.Main 8import Data.Aeson (decode, encode) 9import Data.Time.Clock (UTCTime) 10import Data.Time.LocalTime (ZonedTime) 11import qualified Data.ByteString.Lazy as BL 12 13utcTime :: BL.ByteString -> Maybe [UTCTime] 14utcTime = decode 15 16zTime :: BL.ByteString -> Maybe [ZonedTime] 17zTime = decode 18 19main :: IO () 20main = do 21 let file1 = BL.readFile "json-data/dates.json" 22 let file2 = BL.readFile "json-data/dates-fract.json" 23 defaultMain [ 24 bgroup "decode" [ 25 bgroup "UTCTime" [ 26 env file1 $ \bs -> bench "whole" $ nf utcTime bs 27 , env file2 $ \bs -> bench "fractional" $ nf utcTime bs 28 ] 29 , bgroup "ZonedTime" [ 30 env file1 $ \bs -> bench "whole" $ nf zTime bs 31 , env file2 $ \bs -> bench "fractional" $ nf zTime bs 32 ] 33 ] 34 , bgroup "encode" [ 35 bgroup "UTCTime" [ 36 env (utcTime <$> file1) $ \ts -> bench "whole" $ nf encode ts 37 , env (utcTime <$> file2) $ \ts -> bench "fractional" $ nf encode ts 38 ] 39 , bgroup "ZonedTime" [ 40 env (zTime <$> file1) $ \ts -> bench "whole" $ nf encode ts 41 , env (zTime <$> file2) $ \ts -> bench "fractional" $ nf encode ts 42 ] 43 ] 44 ] 45