Skip to content

kmicklas/typerep-map

 
 

Repository files navigation

typerep-map

electricity Build status Hackage Stackage LTS Stackage Nightly 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.

For the more details on the implementation see this 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
DMap TypeRep 517.5 ns 779.9 ns
typerep-map 205.3 ns 187.2 ns
ghc-8.2.2 ghc-8.4.3
DMap 8.2.2 DMap 8.4.3
TMap 8.2.2 TMap 8.4.3

About

⚡️Efficient implementation of Map with types as keys

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Haskell 99.7%
  • Nix 0.3%