on main help sign in
[#70] Bump dependent-map to 0.5 (#71)
304900eVeronika Romashkina
benchmark/DMap.hs+8−27
@@ -6,31 +6,27 @@
6{-# LANGUAGE TypeFamilies #-}
6{-# LANGUAGE TypeFamilies #-}
7{-# LANGUAGE TypeOperators #-}
7{-# LANGUAGE TypeOperators #-}
8{-# LANGUAGE UndecidableInstances #-}
8{-# LANGUAGE UndecidableInstances #-}
9−{-# LANGUAGE ViewPatterns #-}
10
9
11−{-# OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver -fno-warn-orphans #-}
10+{-# OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver #-}
12
11
13module DMap
12module DMap
14 ( spec
13 ( spec
15 ) where
14 ) where
16
15
17−import Criterion.Main (bench, nf, whnf, env)
16+import Criterion.Main (bench, env, nf, whnf)
18
17
19import Prelude hiding (lookup)
18import Prelude hiding (lookup)
20
19
21−import Spec
22−import Control.DeepSeq (NFData(..))
20+import Control.DeepSeq (NFData (..))
23import Data.Maybe (fromJust)
21import Data.Maybe (fromJust)
24import Data.Proxy (Proxy (..))
22import Data.Proxy (Proxy (..))
25−import Data.Type.Equality ((:~:) (..))
26import GHC.TypeLits
23import GHC.TypeLits
24+import Spec
27import Type.Reflection (TypeRep, Typeable, typeRep)
25import Type.Reflection (TypeRep, Typeable, typeRep)
28import Type.Reflection.Unsafe (typeRepFingerprint)
26import Type.Reflection.Unsafe (typeRepFingerprint)
29−import Unsafe.Coerce (unsafeCoerce)
30
27
31import Data.Dependent.Map (DMap, empty, insert, keys, lookup)
28import Data.Dependent.Map (DMap, empty, insert, keys, lookup)
32−import Data.GADT.Compare (GCompare (..), GEq (..), GOrdering (..))
29+import Data.Some (Some (Some))
33−import Data.Some (Some (This))
34
30
35type TypeRepMap = DMap TypeRep
31type TypeRepMap = DMap TypeRep
36
32
@@ -40,7 +36,7 @@ spec = BenchSpec
40 { benchLookup = Just $ \name ->
36 { benchLookup = Just $ \name ->
41 env mkBigMap $ \ ~(DMapNF bigMap) ->
37 env mkBigMap $ \ ~(DMapNF bigMap) ->
42 bench name $ nf tenLookups bigMap
38 bench name $ nf tenLookups bigMap
43− , benchInsertSmall = Just $ \name ->
39+ , benchInsertSmall = Just $ \name ->
44 bench name $ whnf (inserts empty 10) (Proxy @ 99999)
40 bench name $ whnf (inserts empty 10) (Proxy @ 99999)
45 , benchInsertBig = Just $ \name ->
41 , benchInsertBig = Just $ \name ->
46 env mkBigMap $ \ ~(DMapNF bigMap) ->
42 env mkBigMap $ \ ~(DMapNF bigMap) ->
@@ -86,20 +82,5 @@ buildBigMap n x = insert (typeRep @a) x
86newtype DMapNF f = DMapNF (TypeRepMap f)
82newtype DMapNF f = DMapNF (TypeRepMap f)
87
83
88instance NFData (DMapNF f) where
84instance NFData (DMapNF f) where
89− rnf (DMapNF x) =
85+ rnf (DMapNF x) =
90− rnf . map (\(This t) -> typeRepFingerprint t) $ keys x
86+ rnf . map (\(Some t) -> typeRepFingerprint t) $ keys x
91−
92−instance GEq TypeRep where
93− geq :: TypeRep a -> TypeRep b -> Maybe (a :~: b)
94− geq (typeRepFingerprint -> a) (typeRepFingerprint -> b) =
95− if a == b
96− then Just $ unsafeCoerce Refl
97− else Nothing
98−
99−instance GCompare TypeRep where
100− gcompare :: TypeRep a -> TypeRep b -> GOrdering a b
101− gcompare (typeRepFingerprint -> a) (typeRepFingerprint -> b) =
102− case compare a b of
103− EQ -> unsafeCoerce GEQ
104− LT -> GLT
105− GT -> GGT
stack.yaml+2−1
@@ -1,4 +1,5 @@
1−resolver: lts-13.4
1+resolver: lts-13.14
2
2
3extra-deps:
3extra-deps:
4+ - dependent-sum-0.5
4 - tasty-hedgehog-0.2.0.0
5 - tasty-hedgehog-0.2.0.0
typerep-map.cabal+1−1
@@ -111,7 +111,7 @@ benchmark typerep-map-benchmark
111 , criterion >= 1.4.1.0 && < 1.6
111 , criterion >= 1.4.1.0 && < 1.6
112 , deepseq ^>= 1.4.3.0
112 , deepseq ^>= 1.4.3.0
113 , dependent-map >= 0.2.4.0 && < 0.5
113 , dependent-map >= 0.2.4.0 && < 0.5
114− , dependent-sum ^>= 0.4
114+ , dependent-sum ^>= 0.5
115 , ghc-typelits-knownnat >= 0.4.2 && < 0.7
115 , ghc-typelits-knownnat >= 0.4.2 && < 0.7
116 , typerep-map
116 , typerep-map
117 , typerep-extra-impls
117 , typerep-extra-impls