@@ -5,14 +5,17 @@ import Criterion.Main (bench, defaultMain, whnf)
6import Prelude hiding (lookup)
6import Prelude hiding (lookup)
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)
11−import Data.TypeRep.Map (TypeRepMap, empty, insert, lookup, size)
13+import Data.TypeRep.Map (TypeRepMap (..), empty, insert, keys, lookup, size)
13main :: IO ()
15main :: IO ()
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))
36+rknf :: TypeRepMap -> ()