Dependent finite maps (partial dependent products)

Version on this page:
LTS Haskell 22.29:
Stackage Nightly 2024-07-15:
Latest on Hackage:

See all snapshots dependent-map appears in

LicenseRef-OtherLicense licensed by James Cook
Maintained by Obsidian Systems, LLC
This version can be pinned in stack with:dependent-map-,1715

Module documentation for

dependent-map Build Status Hackage

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

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
module Example where

import Data.Constraint.Extras.TH (deriveArgDict)
import Data.Dependent.Map (DMap, fromList, singleton, union, unionWithKey)
import Data.Dependent.Sum ((==>))
import Data.Functor.Identity (Identity(..))
import Data.GADT.Compare.TH (deriveGCompare, deriveGEq)
import Data.GADT.Show.TH (deriveGShow)

data Tag a where
  StringKey :: Tag String
  IntKey    :: Tag Int
  DoubleKey :: Tag Double
deriveGEq ''Tag
deriveGCompare ''Tag
deriveGShow ''Tag
deriveArgDict ''Tag

x :: DMap Tag Identity
x = fromList [DoubleKey ==> pi, StringKey ==> "hello there"]

y :: DMap Tag Identity
y = singleton IntKey (Identity 42)

z :: DMap Tag Identity
z = y `union` fromList [DoubleKey ==> -1.1415926535897931]

addFoo :: Tag v -> Identity v -> Identity v -> Identity v
addFoo IntKey (Identity x) (Identity y) = Identity $ x + y
addFoo DoubleKey (Identity x) (Identity y) = Identity $ x + y
addFoo _ x _ = x

main :: IO ()
main = mapM_ print
  [ x, y, z
  , unionWithKey addFoo x z


Revision history for dependent-map - 2020-03-26

  • Stop re-exporting Some(..), GCompare(..), and GOrdering(..) from dependent-sum (which itself re-exports from some in some versions).
  • Stop re-exporting DSum(..) from dependent-sum. - 2020-03-26

  • Drop support for non-GHC compilers.
  • Drop support for GHC < 8.
  • Update maintainer and GitHub links.
  • Support dependent-sum 0.7.
  • Add ffor, fforWithKey, forWithKey, forWithKey_, and traverseWithKey_ to Data.Dependent.Map.
  • Enable PolyKinds for Data.Dependent.Map.Lens.

0.3 - 2019-03-21

  • Change instances of Eq, Ord, Read, Show to use Has’ from constraints-extras instead of *Tag classes.
  • This ends support for GHC 7.x.