@@ -0,0 +1,80 @@
1+{-# LANGUAGE OverloadedStrings #-}
4+import Data.Foldable (toList)
6+import qualified Data.Sequence as S
7+import qualified Data.Vector as V
8+import qualified Data.Vector.Unboxed as U
10+-------------------------------------------------------------------------------
12+-------------------------------------------------------------------------------
14+newtype L f = L { getL :: f Int }
16+instance Foldable f => ToJSON (L f) where
17+ toJSON = error "do not use this"
18+ toEncoding = toEncoding . toList . getL
20+-------------------------------------------------------------------------------
22+-------------------------------------------------------------------------------
24+newtype F f = F { getF :: f Int }
26+instance Foldable f => ToJSON (F f) where
27+ toJSON = error "do not use this"
28+ toEncoding = foldable . getF
30+-------------------------------------------------------------------------------
32+-------------------------------------------------------------------------------
38+valueSeq = S.fromList valueList
40+valueVector :: V.Vector Int
41+valueVector = V.fromList valueList
43+valueUVector :: U.Vector Int
44+valueUVector = U.fromList valueList
46+-------------------------------------------------------------------------------
48+-------------------------------------------------------------------------------
56+ = bench name $ nf encode val
62+ [ benchEncode "-" valueList
63+ , benchEncode "L" $ L valueList
64+ , benchEncode "F" $ F valueList
67+ [ benchEncode "-" valueSeq
68+ , benchEncode "L" $ L valueSeq
69+ , benchEncode "F" $ F valueSeq
72+ [ benchEncode "-" valueVector
73+ , benchEncode "L" $ L valueVector
74+ , benchEncode "F" $ F valueVector
76+ , bgroup "Vector.Unboxed"
77+ [ benchEncode "-" valueUVector