summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikolaj Konarski <mikolaj.konarski@funktory.com>2025-05-07 12:09:29 +0200
committerMikolaj Konarski <mikolaj.konarski@funktory.com>2025-05-07 12:09:29 +0200
commit04dc8d282f9416ed53779d3b8337b677f8b3c807 (patch)
tree485412d20e473fe9ea261ebedd7fb8ebfafb579e
parenteb57e21627ea404bc43fa8ebd0555c6f83a983e2 (diff)
Factor out kVToDSum
-rw-r--r--src/Data/Dependent/EnumMap/Strict/Internal.hs15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/Data/Dependent/EnumMap/Strict/Internal.hs b/src/Data/Dependent/EnumMap/Strict/Internal.hs
index c9dbcf1..85fa621 100644
--- a/src/Data/Dependent/EnumMap/Strict/Internal.hs
+++ b/src/Data/Dependent/EnumMap/Strict/Internal.hs
@@ -35,6 +35,9 @@ class Enum1 f where
dSumToKV :: Enum1 k => DSum k v -> (Int, KV k v)
dSumToKV (k :=> v) = let (i, inf) = fromEnum1 k in (i, KV inf v)
+kVToDSum :: Enum1 k => (Int, KV k v) -> DSum k v
+kVToDSum (i, KV inf v) = case toEnum1 i inf of Some k -> k :=> coe1 v
+
-- * Construction
empty :: DEnumMap k v
@@ -314,14 +317,10 @@ toList = toAscList
-- ** Ordered lists
toAscList :: Enum1 k => DEnumMap k v -> [DSum k v]
-toAscList (DEnumMap m) =
- map (\(i, KV inf v) -> case toEnum1 i inf of Some k -> k :=> coe1 v)
- (IM.toAscList m)
+toAscList (DEnumMap m) = map kVToDSum (IM.toAscList m)
toDescList :: Enum1 k => DEnumMap k v -> [DSum k v]
-toDescList (DEnumMap m) =
- map (\(i, KV inf v) -> case toEnum1 i inf of Some k -> k :=> coe1 v)
- (IM.toDescList m)
+toDescList (DEnumMap m) = map kVToDSum (IM.toDescList m)
-- * Filter
@@ -375,9 +374,7 @@ partitionWithKey f (DEnumMap m) =
-- minViewWithKey
maxViewWithKey :: Enum1 k => DEnumMap k v -> Maybe (DSum k v, DEnumMap k v)
-maxViewWithKey (DEnumMap m) =
- bimap (\(i, KV inf v) -> case toEnum1 i inf of Some k -> k :=> coe1 v) DEnumMap
- <$> IM.maxViewWithKey m
+maxViewWithKey (DEnumMap m) = bimap kVToDSum DEnumMap <$> IM.maxViewWithKey m
-- * Helpers