on main help sign in
Evalute bigMap in benchmarks
e85ad06vrom911
benchmark/Main.hs+7−1
@@ -5,14 +5,17 @@ import Criterion.Main (bench, defaultMain, whnf)
5
5
6import Prelude hiding (lookup)
6import Prelude hiding (lookup)
7
7
8+import Control.DeepSeq (rnf)
9+import Control.Exception.Base (evaluate)
8import Data.Proxy (Proxy (..))
10import Data.Proxy (Proxy (..))
9import Data.Typeable (Typeable)
11import Data.Typeable (Typeable)
10
12
11−import Data.TypeRep.Map (TypeRepMap, empty, insert, lookup, size)
13+import Data.TypeRep.Map (TypeRepMap (..), empty, insert, keys, lookup, size)
12
14
13main :: IO ()
15main :: IO ()
14main = do
16main = do
15 putStrLn $ "size: " ++ (show $ size bigMap)
17 putStrLn $ "size: " ++ (show $ size bigMap)
18+ evaluate $ rknf bigMap
16 defaultMain
19 defaultMain
17 [ bench "lookup" $ whnf (lookup :: TypeRepMap -> Maybe Char) bigMap
20 [ bench "lookup" $ whnf (lookup :: TypeRepMap -> Maybe Char) bigMap
18 , bench "insert new" $ whnf (\x -> insert x bigMap) (111 :: Int)
21 , bench "insert new" $ whnf (\x -> insert x bigMap) (111 :: Int)
@@ -29,3 +32,6 @@ data S a
29buildBigMap :: forall a . Typeable a => Int -> Proxy a -> TypeRepMap -> TypeRepMap
32buildBigMap :: forall a . Typeable a => Int -> Proxy a -> TypeRepMap -> TypeRepMap
30buildBigMap 1 x = insert 'a' . insert x
33buildBigMap 1 x = insert 'a' . insert x
31buildBigMap n x = insert x . buildBigMap (n - 1) (Proxy :: Proxy (S a))
34buildBigMap n x = insert x . buildBigMap (n - 1) (Proxy :: Proxy (S a))
35+
36+rknf :: TypeRepMap -> ()
37+rknf = rnf . keys
src/Data/TypeRep/Map.hs+4
@@ -5,6 +5,7 @@ module Data.TypeRep.Map
5 ( TypeRepMap (..)
5 ( TypeRepMap (..)
6 , empty
6 , empty
7 , insert
7 , insert
8+ , keys
8 , lookup
9 , lookup
9 , size
10 , size
10 ) where
11 ) where
@@ -42,3 +43,6 @@ lookup = fmap unsafeCoerce . LMap.lookup (typeRep (Proxy :: Proxy a)) . unMap
42
43
43size :: TypeRepMap -> Int
44size :: TypeRepMap -> Int
44size = LMap.size . unMap
45size = LMap.size . unMap
46+
47+keys :: TypeRepMap -> [TypeRep]
48+keys = LMap.keys . unMap
typerep-map.cabal+1
@@ -44,6 +44,7 @@ benchmark typerep-map-benchmark
44 build-depends: base
44 build-depends: base
45 , criterion
45 , criterion
46 , typerep-map
46 , typerep-map
47+ , deepseq
47
48
48source-repository head
49source-repository head
49 type: git
50 type: git