summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikolaj Konarski <mikolaj.konarski@funktory.com>2025-05-10 21:39:11 +0200
committerMikolaj Konarski <mikolaj.konarski@funktory.com>2025-05-10 21:39:11 +0200
commit959162c251fe2a0b4847324f54ebe01ef20574a1 (patch)
tree9af60cc2b805e4d2f66fae96bae4412fbabe5f82
parent0339605a9a55ab49694f246f5cc3376699a80674 (diff)
Implement submap ops
-rw-r--r--src/Data/Dependent/EnumMap/Strict/Internal.hs19
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