Description
Efficient implementation of a dependent map with types as keys.
Description
A dependent map from type representations to values of these types.
Here is an illustration of such a map:
TMap
---------------
Int -> 5
Bool -> True
Char -> 'x'In addition to TMap, we provide TypeRepMap parametrized by a vinyl-style interpretation. This data structure is equivalent to DMap TypeRep, but with significantly more efficient lookups.
README.md
typerep-map

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 |
|---|---|
![]() | ![]() |
![]() | ![]() |



