summaryrefslogtreecommitdiff
path: root/src/Data/Dependent/EnumMap
diff options
context:
space:
mode:
Diffstat (limited to 'src/Data/Dependent/EnumMap')
-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