@hackage dependent-map0.3
Dependent finite maps (partial dependent products)
Installation
Tested Compilers
Dependencies (4)
- base >=3 && <5
- constraints-extras >=0.2.3.0 && <0.4
- containers >=0.6 && <0.7
- dependent-sum >=0.6.1 && <0.7 Show all…
Dependents (46)
@hackage/ghc-debug-brick, @hackage/tinytools, @hackage/aeson-gadt-th, @hackage/parsley-core, @hackage/typerep-map, @hackage/fraxl, Show all…
dependent-map 
This library defines a dependently-typed finite map type. It is derived from Data.Map.Map in the containers package, but rather than (conceptually) storing pairs indexed by the first component, it stores DSums (from the dependent-sum package) indexed by tag. For example (using the types from the dependent-sum package's FooGADT example):
{-# LANGUAGE GADTs #-}
import FooGADT
import Data.Dependent.Map
x = fromList [Foo :=> pi, Baz :=> "hello there"]
y = singleton Bar 42
z = union y (read "fromList [Foo :=> (-1.1415926535897931)]")
addFoo :: Foo v -> v -> v -> v
addFoo Foo x y = x + y
addFoo _ x _ = x
main = mapM_ print
[ x, y, z
, unionWithKey addFoo x z
]
Which prints:
fromList [Foo :=> 3.141592653589793,Baz :=> "hello there"]
fromList [Bar :=> 42]
fromList [Foo :=> -1.1415926535897931,Bar :=> 42]
fromList [Foo :=> 2.0,Bar :=> 42,Baz :=> "hello there"]
This library can be found on Hackage: https://hackage.haskell.org/package/dependent-map