diff options
Diffstat (limited to 'src/Data/Dependent/EnumMap')
-rw-r--r-- | src/Data/Dependent/EnumMap/Strict/Internal.hs | 15 |
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 |