WeakSets 1.1.2.0 → 1.1.3.0
raw patch · 4 files changed
+20/−3 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Data.WeakMap: inverse :: (Eq k, Eq v) => Map k v -> Maybe (Map v k)
+ Data.WeakMap: pseudoInverse :: Map k v -> Map v k
+ Data.WeakMap.Safe: inverse :: (Eq k, Eq v) => Map k v -> Maybe (Map v k)
+ Data.WeakMap.Safe: pseudoInverse :: Map k v -> Map v k
Files
- CHANGELOG.md +5/−1
- WeakSets.cabal +1/−1
- src/Data/WeakMap.hs +12/−1
- src/Data/WeakMap/Safe.hs +2/−0
CHANGELOG.md view
@@ -18,4 +18,8 @@ # 1.1.2.0 -- 2022-07-19 -* Addition of weakMapFromSet and correction of WeakMap Show instance.+* Addition of weakMapFromSet and correction of WeakMap Show instance. + +# 1.1.3.0 -- 2022-07-20 + +* Addition of inverse and pseudoInverse functions.
WeakSets.cabal view
@@ -14,7 +14,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change -version: 1.1.2.0 +version: 1.1.3.0 -- A short (one-line) description of the package. synopsis:
src/Data/WeakMap.hs view
@@ -207,6 +207,8 @@ -- * Others , idFromSet , memorizeFunction + , inverse + , pseudoInverse ) where import Prelude hiding (lookup, map, filter, drop, take, splitAt) import Data.WeakSet (Set) @@ -253,6 +255,7 @@ weakMap :: AssociationList k v -> Map k v weakMap al = Map $ set $ al +-- | /O(1)/. Construct a 'Map' from a 'Set' of pairs (key,value). weakMapFromSet :: Set (k,v) -> Map k v weakMapFromSet s = Map s @@ -907,5 +910,13 @@ memorizeFunction :: (k -> v) -> Set k -> Map k v memorizeFunction f xs = Map $ (\k -> (k, f k)) <$> xs - +-- | /O(n^2)/. Try to construct an inverse map. +inverse :: (Eq k, Eq v) => Map k v -> Maybe (Map v k) +inverse m@(Map al) + | (cardinal.image $ m) == (cardinal.domain $ m) = Just $ Map $ (\(k,v) -> (v,k)) <$> al + | otherwise = Nothing + +-- | /O(n)/. Return a pseudo inverse /g/ of a 'Map' /f/ such that @f |.| g |.| f == f@. +pseudoInverse :: Map k v -> Map v k +pseudoInverse (Map al) = Map $ (\(k,v) -> (v,k)) <$> al
src/Data/WeakMap/Safe.hs view
@@ -22,6 +22,8 @@ , keys' , domain , image + , inverse + , pseudoInverse ) where import Data.WeakMap