on 30686c7 help sign in

⚡️Efficient implementation of Map with types as keys

git clone ssh://git.iko.soy/typerep-map

typerep-map

Hackage Build status MIT license

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.

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.2ghc-8.4.3
DMap TypeRep517.5 ns779.9 ns
typerep-map205.3 ns187.2 ns
ghc-8.2.2ghc-8.4.3
DMap 8.2.2DMap 8.4.3
TMap 8.2.2TMap 8.4.3