@@ -26,16 +26,15 @@ main = do
26 evaluate $ rknf bigMap
26 evaluate $ rknf bigMap
27 defaultMain
27 defaultMain
28 [ bench "lookup" $ nf tenLookups bigMap
28 [ bench "lookup" $ nf tenLookups bigMap
29− , bench "insert new" $ whnf (\x -> rknf $ insert x bigMap) (111 :: Int)
29+ , bench "insert new" $ whnf (\x -> rknf $ insert x bigMap) (proxy (111 :: Int))
30− , bench "update old" $ whnf (\x -> rknf $ insert x bigMap) 'b'
30+ , bench "update old" $ whnf (\x -> rknf $ insert x bigMap) (proxy 'b')
33−tenLookups :: TypeRepMap
33+tenLookups :: TypeRepMap Proxy
34 -> ( Proxy (BigProxy 10), Proxy (BigProxy 20)
34 -> ( Proxy (BigProxy 10), Proxy (BigProxy 20)
35 , Proxy (BigProxy 30), Proxy (BigProxy 40)
35 , Proxy (BigProxy 30), Proxy (BigProxy 40)
36 , Proxy (BigProxy 50), Proxy (BigProxy 60)
36 , Proxy (BigProxy 50), Proxy (BigProxy 60)
37 , Proxy (BigProxy 70), Proxy (BigProxy 80)
37 , Proxy (BigProxy 70), Proxy (BigProxy 80)
38− -- , Proxy (BigProxy 9000), Proxy (BigProxy 10000)
40tenLookups tmap = (lp, lp, lp, lp, lp, lp, lp, lp)
39tenLookups tmap = (lp, lp, lp, lp, lp, lp, lp, lp)
@@ -43,19 +42,22 @@ tenLookups tmap = (lp, lp, lp, lp, lp, lp, lp, lp)
43 lp = fromJust $ lookup tmap
42 lp = fromJust $ lookup tmap
45-- TypeRepMap of 10000 elements
44-- TypeRepMap of 10000 elements
46−bigMap :: TypeRepMap
45+bigMap :: TypeRepMap Proxy
47bigMap = buildBigMap 10000 (Proxy :: Proxy Z) empty
46bigMap = buildBigMap 10000 (Proxy :: Proxy Z) empty
52−buildBigMap :: forall a . Typeable a => Int -> Proxy a -> TypeRepMap -> TypeRepMap
51+buildBigMap :: forall a . Typeable a => Int -> Proxy a -> TypeRepMap Proxy -> TypeRepMap Proxy
53−buildBigMap 1 x = insert 'a' . insert x
52+buildBigMap 1 x = insert (proxy 'a') . insert x
54buildBigMap n x = insert x . buildBigMap (n - 1) (Proxy :: Proxy (S a))
53buildBigMap n x = insert x . buildBigMap (n - 1) (Proxy :: Proxy (S a))
56−rknf :: TypeRepMap -> ()
55+rknf :: TypeRepMap f -> ()
57rknf = rnf . keys
56rknf = rnf . keys
59type family BigProxy (n :: Nat) :: * where
58type family BigProxy (n :: Nat) :: * where
60 BigProxy 0 = Z
59 BigProxy 0 = Z
61 BigProxy n = S (BigProxy (n - 1))
60 BigProxy n = S (BigProxy (n - 1))