dependent-map: Dependent finite maps (partial dependent products)

[ data, dependent-types, library ] [ Propose Tags ]

Provides a type called DMap which generalizes Data.Map.Map, allowing keys to specify the type of value that can be associated with them.


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1, 0.1.1, 0.1.1.1, 0.1.1.2, 0.1.1.3, 0.2.0.1, 0.2.1.0, 0.2.2.0, 0.2.3.0, 0.2.4.0, 0.3, 0.3.1.0, 0.4.0.0
Change log ChangeLog.md
Dependencies base (>=3 && <5), constraints-extras (>=0.2.3.0 && <0.4), containers (>=0.6 && <0.7), dependent-sum (>=0.6.1 && <0.7) [details]
License LicenseRef-OtherLicense
Author James Cook <mokus@deepbondi.net>
Maintainer James Cook <mokus@deepbondi.net>
Category Data, Dependent Types
Home page https://github.com/mokus0/dependent-map
Source repo head: git clone git://github.com/mokus0/dependent-map.git
Uploaded by abrar at 2019-08-04T23:15:57Z
Distributions Arch:0.4.0.0, Debian:0.4.0.0, LTSHaskell:0.4.0.0, NixOS:0.4.0.0, Stackage:0.4.0.0
Reverse Dependencies 36 direct, 129 indirect [details]
Downloads 28347 total (209 in the last 30 days)
Rating 2.5 (votes: 4) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for dependent-map-0.3

[back to package description]

dependent-map Build Status

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