typerep-map introduces TMap and TypeRepMap — data structures like Map, but where types serve as keys, and values have the types specified in the corresponding key spots.
For the more details on the implementation see the following blog post:
Usage example
ghci> import Data.TMap ghci> tm = insert True $ one (42 :: Int) ghci> size tm 2 ghci> res = lookup tm ghci> res :: Maybe Int Just 42 ghci> res :: Maybe Bool Just True ghci> res :: Maybe String Nothing ghci> lookup (insert "hello" tm) :: Maybe String Just "hello" ghci> member @Int tm True ghci> tm' = delete @Int tm ghci> member @Int tm' False
Benchmarks
Tables below contain comparision with DMap TypeRep of ten lookup operations
on structure with size 10^4:
| ghc-8.2.2 | ghc-8.4.3 | ghc-8.8.3 | ghc-8.10.1 | |
|---|---|---|---|---|
DMap TypeRep |
517.5 ns | 779.9 ns | 1.559 μs | 1.786 μs |
typerep-map |
205.3 ns | 187.2 ns | 190.1 ns | 169.1 ns |
| ghc-8.2.2 | ghc-8.4.3 |
|---|---|
![]() |
![]() |
![]() |
![]() |




