total-map 0.1.0 → 0.1.3
raw patch · 2 files changed
+32/−11 lines, 2 filesdep ~semiring-num
Dependency ranges changed: semiring-num
Files
- src/Data/TotalMap.hs +28/−6
- total-map.cabal +4/−5
src/Data/TotalMap.hs view
@@ -3,7 +3,7 @@ ---------------------------------------------------------------------- -- | -- Module : Data.TotalMap--- Copyright : (c) Conal Elliott 2012+-- Copyright : (c) Conal Elliott 2012--2019 -- License : BSD3 -- -- Maintainer : conal@conal.net@@ -14,8 +14,11 @@ ---------------------------------------------------------------------- module Data.TotalMap- ( TMap,fromPartial,(!),tabulate,trim- , intersectionPartialWith,codomain+ ( TMap,fromPartial+ , empty, insert, singleton+ , (!),tabulate,trim+ , intersectionPartialWith,range+ , mapKeysWith -- , tmapRepr ) where @@ -40,9 +43,21 @@ -- The representation is a default value and a finite map for the rest. -- | Create a total map from a default value and a partial map.-fromPartial :: a -> Map k a -> TMap k a+fromPartial :: v -> Map k v -> TMap k v fromPartial = TMap +-- | A total map only default+empty :: v -> TMap k v+empty v = TMap v M.empty++-- | Insert a key\/value pair+insert :: Ord k => k -> v -> TMap k v -> TMap k v+insert k v (TMap d m) = TMap d (M.insert k v m)++-- | Singleton plus default+singleton :: Ord k => k -> v -> v -> TMap k v+singleton k v d = insert k v (empty d)+ infixl 9 ! -- | Sample a total map. Semantic function. (!) :: Ord k => TMap k v -> k -> v@@ -73,9 +88,10 @@ `M.union` fmap (f ad) bm +{-# DEPRECATED range "Non-denotative" #-} -- | Witness the finiteness of the support concretely by giving its image.-codomain :: Ord v => TMap k v -> Set v-codomain (TMap dflt m) = S.fromList (dflt : M.elems m)+range :: Ord v => TMap k v -> Set v+range (TMap dflt m) = S.fromList (dflt : M.elems m) {-------------------------------------------------------------------- Instances@@ -180,6 +196,12 @@ {-------------------------------------------------------------------- Misc --------------------------------------------------------------------}++mapKeysWith :: (Semiring z, Ord b) => (z -> z -> z) -> (a -> b) -> TMap a z -> TMap b z+mapKeysWith comb f (TMap d m) = TMap d (M.mapKeysWith comb f m)++-- liftA2Keys :: Ord b => (a -> b -> c) -> TMap a z -> TMap b z -> TMap c z+-- liftA2Keys f (TMap c m) (TMap d n) = ... -- ?? idMap :: Eq k => Set k -> Map k k idMap = M.fromAscList . map (\ k -> (k,k)) . S.toAscList
total-map.cabal view
@@ -1,14 +1,14 @@ Name: total-map-Version: 0.1.0+Version: 0.1.3 Cabal-Version: >= 1.10-Synopsis: Finitely represented /total/ maps+Synopsis: Finitely represented total maps Category: Data Description: Finitely represented /total/ maps. Represented by as a partial map and a default value. Has Applicative and Monad instances (unlike Data.Map). Author: Conal Elliott Maintainer: conal@conal.net-Copyright: (c) 2012 by Conal Elliott+Copyright: (c) 2012--2019 by Conal Elliott License: BSD3 License-File: COPYING Stability: experimental@@ -24,8 +24,7 @@ Library hs-Source-Dirs: src Extensions:- Build-Depends: base<5, containers, semiring-num- -- , comonad+ Build-Depends: base<5, containers, semiring-num>=1.6.0.4 Exposed-Modules: Data.TotalMap default-language: Haskell2010