Popularity
9.3
Stable
Activity
4.7
-
64
24
33
Monthly Downloads: 161
Programming language: Haskell
License: LicenseRef-OtherLicense
Latest version: v0.4.0.0
dependent-map alternatives and similar packages
Based on the "dependent" category.
Alternatively, view dependent-map alternatives based on common mentions on social networks and blogs.
CodeRabbit: AI Code Reviews for Developers
Revolutionize your code reviews with AI. CodeRabbit offers PR summaries, code walkthroughs, 1-click suggestions, and AST-based analysis. Boost productivity and code quality across all major languages with each PR.
Promo
coderabbit.ai
Do you think we are missing an alternative of dependent-map or a related project?
README
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 DSum
s (from the dependent-sum
package) indexed by tag. For example
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# 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
]