@@ -1,6 +1,9 @@
1−{-# LANGUAGE OverloadedStrings #-}
1+{-# LANGUAGE OverloadedStrings, PackageImports #-}
22import Criterion.Main
3−import Data.Aeson
3+
4+import qualified "aeson" Data.Aeson as A
5+import qualified "aeson-benchmarks" Data.Aeson as B
6+
47import Data.Foldable (toList)
58
69import qualified Data.Sequence as S
@@ -13,9 +16,13 @@ import qualified Data.Vector.Unboxed as U
1316
1417newtype L f = L { getL :: f Int }
1518
16−instance Foldable f => ToJSON (L f) where
19+instance Foldable f => B.ToJSON (L f) where
1720 toJSON = error "do not use this"
18− toEncoding = toEncoding . toList . getL
21+ toEncoding = B.toEncoding . toList . getL
22+
23+instance Foldable f => A.ToJSON (L f) where
24+ toJSON = error "do not use this"
25+ toEncoding = A.toEncoding . toList . getL
1926
2027-------------------------------------------------------------------------------
2128-- Foldable
@@ -23,9 +30,13 @@ instance Foldable f => ToJSON (L f) where
2330
2431newtype F f = F { getF :: f Int }
2532
26−instance Foldable f => ToJSON (F f) where
33+instance Foldable f => B.ToJSON (F f) where
34+ toJSON = error "do not use this"
35+ toEncoding = B.foldable . getF
36+
37+instance Foldable f => A.ToJSON (F f) where
2738 toJSON = error "do not use this"
28− toEncoding = foldable . getF
39+ toEncoding = A.foldable . getF
2940
3041-------------------------------------------------------------------------------
3142-- Values
@@ -47,34 +58,52 @@ valueUVector = U.fromList valueList
4758-- Main
4859-------------------------------------------------------------------------------
4960
50−benchEncode
51− :: ToJSON a
61+benchEncodeA
62+ :: A.ToJSON a
63+ => String
64+ -> a
65+ -> Benchmark
66+benchEncodeA name val
67+ = bench ("A " ++ name) $ nf A.encode val
68+
69+benchEncodeB
70+ :: B.ToJSON a
5271 => String
5372 -> a
5473 -> Benchmark
55−benchEncode name val
56− = bench name $ nf encode val
74+benchEncodeB name val
75+ = bench ("B " ++ name) $ nf B.encode val
5776
5877main :: IO ()
5978main = defaultMain
6079 [ bgroup "encode"
6180 [ bgroup "List"
62− [ benchEncode "-" valueList
63− , benchEncode "L" $ L valueList
64− , benchEncode "F" $ F valueList
81+ [ benchEncodeB "-" valueList
82+ , benchEncodeB "L" $ L valueList
83+ , benchEncodeB "F" $ F valueList
84+ , benchEncodeA "-" valueList
85+ , benchEncodeA "L" $ L valueList
86+ , benchEncodeA "F" $ F valueList
6587 ]
6688 , bgroup "Seq"
67− [ benchEncode "-" valueSeq
68− , benchEncode "L" $ L valueSeq
69− , benchEncode "F" $ F valueSeq
89+ [ benchEncodeB "-" valueSeq
90+ , benchEncodeB "L" $ L valueSeq
91+ , benchEncodeB "F" $ F valueSeq
92+ , benchEncodeA "-" valueSeq
93+ , benchEncodeA "L" $ L valueSeq
94+ , benchEncodeA "F" $ F valueSeq
7095 ]
7196 , bgroup "Vector"
72− [ benchEncode "-" valueVector
73− , benchEncode "L" $ L valueVector
74− , benchEncode "F" $ F valueVector
97+ [ benchEncodeB "-" valueVector
98+ , benchEncodeB "L" $ L valueVector
99+ , benchEncodeB "F" $ F valueVector
100+ , benchEncodeA "-" valueVector
101+ , benchEncodeA "L" $ L valueVector
102+ , benchEncodeA "F" $ F valueVector
75103 ]
76104 , bgroup "Vector.Unboxed"
77− [ benchEncode "-" valueUVector
105+ [ benchEncodeB "-" valueUVector
106+ , benchEncodeA "-" valueUVector
78107 ]
79108 ]
80109 ]