@@ -5,14 +5,17 @@ import Criterion.Main (bench, defaultMain, whnf)
55
66import Prelude hiding (lookup)
77
8+import Control.DeepSeq (rnf)
9+import Control.Exception.Base (evaluate)
810import Data.Proxy (Proxy (..))
911import Data.Typeable (Typeable)
1012
11−import Data.TypeRep.Map (TypeRepMap, empty, insert, lookup, size)
13+import Data.TypeRep.Map (TypeRepMap (..), empty, insert, keys, lookup, size)
1214
1315main :: IO ()
1416main = do
1517 putStrLn $ "size: " ++ (show $ size bigMap)
18+ evaluate $ rknf bigMap
1619 defaultMain
1720 [ bench "lookup" $ whnf (lookup :: TypeRepMap -> Maybe Char) bigMap
1821 , bench "insert new" $ whnf (\x -> insert x bigMap) (111 :: Int)
@@ -29,3 +32,6 @@ data S a
2932buildBigMap :: forall a . Typeable a => Int -> Proxy a -> TypeRepMap -> TypeRepMap
3033buildBigMap 1 x = insert 'a' . insert x
3134buildBigMap n x = insert x . buildBigMap (n - 1) (Proxy :: Proxy (S a))
35+
36+rknf :: TypeRepMap -> ()
37+rknf = rnf . keys