diff options
author | Mikolaj Konarski <mikolaj.konarski@funktory.com> | 2025-05-10 21:39:11 +0200 |
---|---|---|
committer | Mikolaj Konarski <mikolaj.konarski@funktory.com> | 2025-05-10 21:39:11 +0200 |
commit | 959162c251fe2a0b4847324f54ebe01ef20574a1 (patch) | |
tree | 9af60cc2b805e4d2f66fae96bae4412fbabe5f82 | |
parent | 0339605a9a55ab49694f246f5cc3376699a80674 (diff) |
Implement submap ops
-rw-r--r-- | src/Data/Dependent/EnumMap/Strict/Internal.hs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/Data/Dependent/EnumMap/Strict/Internal.hs b/src/Data/Dependent/EnumMap/Strict/Internal.hs index c93b821..ab32a31 100644 --- a/src/Data/Dependent/EnumMap/Strict/Internal.hs +++ b/src/Data/Dependent/EnumMap/Strict/Internal.hs @@ -540,8 +540,23 @@ splitRoot (DEnumMap m) = DEnumMap <$> IM.splitRoot m -- * Submap --- isSubmapOf, isSubmapOfBy --- isProperSubmapOf, isProperSubmapOfBy +-- TODO: can this coe1 be avoided? +isSubmapOf :: (forall a. Eq (v a)) => DEnumMap k v -> DEnumMap k v -> Bool +isSubmapOf (DEnumMap m1) (DEnumMap m2) = IM.isSubmapOfBy (\(KV _ v1) (KV _ v2) -> v1 == coe1 v2) m1 m2 + +-- TODO: can this coe1 be avoided? +isSubmapOfBy :: (forall a. v1 a -> v2 a -> Bool) -> DEnumMap k v1 -> DEnumMap k v2 -> Bool +isSubmapOfBy f (DEnumMap m1) (DEnumMap m2) = + IM.isSubmapOfBy (\(KV _ v1) (KV _ v2) -> f v1 (coe1 v2)) m1 m2 + +-- TODO: can this coe1 be avoided? +isProperSubmapOf :: (forall a. Eq (v a)) => DEnumMap k v -> DEnumMap k v -> Bool +isProperSubmapOf (DEnumMap m1) (DEnumMap m2) = IM.isProperSubmapOfBy (\(KV _ v1) (KV _ v2) -> v1 == coe1 v2) m1 m2 + +-- TODO: can this coe1 be avoided? +isProperSubmapOfBy :: (forall a. v1 a -> v2 a -> Bool) -> DEnumMap k v1 -> DEnumMap k v2 -> Bool +isProperSubmapOfBy f (DEnumMap m1) (DEnumMap m2) = + IM.isProperSubmapOfBy (\(KV _ v1) (KV _ v2) -> f v1 (coe1 v2)) m1 m2 -- * Min\/Max |