@@ -1,5 +1,4 @@
11{-# LANGUAGE FlexibleContexts #-}
2−{-# LANGUAGE OverloadedStrings #-}
32{-# LANGUAGE PackageImports #-}
43{-# LANGUAGE RankNTypes #-}
54
@@ -15,9 +14,8 @@ import Criterion.Main
1514import Data.Hashable
1615import Data.Proxy (Proxy (..))
1716import Data.Tagged (Tagged (..))
18−import qualified "aeson" Data.Aeson as A
19−import qualified "aeson-benchmarks" Data.Aeson as B
20−import qualified "aeson-benchmarks" Data.Aeson.Types as B (fromJSONKeyCoerce)
17+import Data.Aeson
18+import Data.Aeson.Types (fromJSONKeyCoerce)
2119import qualified Data.ByteString.Lazy as LBS
2220import qualified Data.HashMap.Strict as HM
2321import qualified Data.Map as M
@@ -47,10 +45,10 @@ instance NFData T1 where
4745instance Hashable T1 where
4846 hashWithSalt salt (T1 t) = hashWithSalt salt t
4947
50−instance B.FromJSON T1 where
51− parseJSON = B.withText "T1" $ pure . T1
52−instance B.FromJSONKey T1 where
53− fromJSONKey = B.FromJSONKeyText T1
48+instance FromJSON T1 where
49+ parseJSON = withText "T1" $ pure . T1
50+instance FromJSONKey T1 where
51+ fromJSONKey = FromJSONKeyText T1
5452
5553-------------------------------------------------------------------------------
5654-- Coerce
@@ -64,10 +62,10 @@ instance NFData T2 where
6462instance Hashable T2 where
6563 hashWithSalt salt (T2 t) = hashWithSalt salt t
6664
67−instance B.FromJSON T2 where
68− parseJSON = B.withText "T2" $ pure . T2
69−instance B.FromJSONKey T2 where
70− fromJSONKey = B.fromJSONKeyCoerce
65+instance FromJSON T2 where
66+ parseJSON = withText "T2" $ pure . T2
67+instance FromJSONKey T2 where
68+ fromJSONKey = fromJSONKeyCoerce
7169
7270-------------------------------------------------------------------------------
7371-- TextParser
@@ -81,10 +79,10 @@ instance NFData T3 where
8179instance Hashable T3 where
8280 hashWithSalt salt (T3 t) = hashWithSalt salt t
8381
84−instance B.FromJSON T3 where
85− parseJSON = B.withText "T3" $ pure . T3
86−instance B.FromJSONKey T3 where
87− fromJSONKey = B.FromJSONKeyTextParser (pure . T3)
82+instance FromJSON T3 where
83+ parseJSON = withText "T3" $ pure . T3
84+instance FromJSONKey T3 where
85+ fromJSONKey = FromJSONKeyTextParser (pure . T3)
8886
8987-------------------------------------------------------------------------------
9088-- Values
@@ -97,40 +95,30 @@ value1000 = value 1000
9795value10000 = value 10000
9896
9997encodedValue10 :: LBS.ByteString
100−encodedValue10 = B.encode value10
98+encodedValue10 = encode value10
10199
102100encodedValue100 :: LBS.ByteString
103−encodedValue100 = B.encode value100
101+encodedValue100 = encode value100
104102
105103encodedValue1000 :: LBS.ByteString
106−encodedValue1000 = B.encode value1000
104+encodedValue1000 = encode value1000
107105
108106encodedValue10000 :: LBS.ByteString
109−encodedValue10000 = B.encode value10000
107+encodedValue10000 = encode value10000
110108
111109-------------------------------------------------------------------------------
112110-- Helpers
113111-------------------------------------------------------------------------------
114112
115−decodeHMB
116− :: (B.FromJSONKey k, Eq k, Hashable k)
113+decodeHM
114+ :: (FromJSON (HM.HashMap k T.Text), Eq k, Hashable k)
117115 => Proxy k -> LBS.ByteString -> Maybe (HM.HashMap k T.Text)
118−decodeHMB _ = B.decode
116+decodeHM _ = decode
119117
120−decodeHMA
121− :: (A.FromJSON (HM.HashMap k T.Text), Eq k, Hashable k)
122− => Proxy k -> LBS.ByteString -> Maybe (HM.HashMap k T.Text)
123−decodeHMA _ = A.decode
124−
125−decodeMapB
126− :: (B.FromJSONKey k, Ord k)
127− => Proxy k -> LBS.ByteString -> Maybe (M.Map k T.Text)
128−decodeMapB _ = B.decode
129−
130−decodeMapA
131− :: (A.FromJSON (M.Map k T.Text), Ord k)
118+decodeMap
119+ :: (FromJSON (M.Map k T.Text), Ord k)
132120 => Proxy k -> LBS.ByteString -> Maybe (M.Map k T.Text)
133−decodeMapA _ = A.decode
121+decodeMap _ = decode
134122
135123proxyText :: Proxy T.Text
136124proxyText = Proxy
@@ -156,15 +144,14 @@ benchDecodeHM
156144 -> LBS.ByteString
157145 -> Benchmark
158146benchDecodeHM name val = bgroup name
159− [ bench "Text" $ nf (decodeHMB proxyText) val
160− , bench "Identity" $ nf (decodeHMB proxyT1) val
161− , bench "Coerce" $ nf (decodeHMB proxyT2) val
162− , bench "Parser" $ nf (decodeHMB proxyT3) val
163− , bench "aeson-hackage" $ nf (decodeHMA proxyText) val
164− , bench "Tagged Text" $ nf (decodeHMB $ proxyTagged proxyText) val
165− , bench "Tagged Identity" $ nf (decodeHMB $ proxyTagged proxyT1) val
166− , bench "Tagged Coerce" $ nf (decodeHMB $ proxyTagged proxyT2) val
167− , bench "Tagged Parser" $ nf (decodeHMB $ proxyTagged proxyT3) val
147+ [ bench "Text" $ nf (decodeHM proxyText) val
148+ , bench "Identity" $ nf (decodeHM proxyT1) val
149+ , bench "Coerce" $ nf (decodeHM proxyT2) val
150+ , bench "Parser" $ nf (decodeHM proxyT3) val
151+ , bench "Tagged Text" $ nf (decodeHM $ proxyTagged proxyText) val
152+ , bench "Tagged Identity" $ nf (decodeHM $ proxyTagged proxyT1) val
153+ , bench "Tagged Coerce" $ nf (decodeHM $ proxyTagged proxyT2) val
154+ , bench "Tagged Parser" $ nf (decodeHM $ proxyTagged proxyT3) val
168155 ]
169156
170157benchDecodeMap
@@ -172,11 +159,10 @@ benchDecodeMap
172159 -> LBS.ByteString
173160 -> Benchmark
174161benchDecodeMap name val = bgroup name
175− [ bench "Text" $ nf (decodeMapB proxyText) val
176− , bench "Identity" $ nf (decodeMapB proxyT1) val
177− , bench "Coerce" $ nf (decodeMapB proxyT2) val
178− , bench "Parser" $ nf (decodeMapB proxyT3) val
179− , bench "aeson-hackage" $ nf (decodeMapA proxyText) val
162+ [ bench "Text" $ nf (decodeMap proxyText) val
163+ , bench "Identity" $ nf (decodeMap proxyT1) val
164+ , bench "Coerce" $ nf (decodeMap proxyT2) val
165+ , bench "Parser" $ nf (decodeMap proxyT3) val
180166 ]
181167
182168benchEncodeHM
@@ -184,8 +170,7 @@ benchEncodeHM
184170 -> HM.HashMap T.Text T.Text
185171 -> Benchmark
186172benchEncodeHM name val = bgroup name
187− [ bench "Text" $ nf B.encode val
188− , bench "aeson-0.11" $ nf A.encode val
173+ [ bench "Text" $ nf encode val
189174 ]
190175
191176benchEncodeMap
@@ -193,8 +178,7 @@ benchEncodeMap
193178 -> HM.HashMap T.Text T.Text
194179 -> Benchmark
195180benchEncodeMap name val = bgroup name
196− [ bench "Text" $ nf B.encode val'
197− , bench "aeson-0.11" $ nf A.encode val'
181+ [ bench "Text" $ nf encode val'
198182 ]
199183 where
200184 val' :: M.Map T.Text T.Text