From 959162c251fe2a0b4847324f54ebe01ef20574a1 Mon Sep 17 00:00:00 2001 From: Mikolaj Konarski Date: Sat, 10 May 2025 21:39:11 +0200 Subject: Implement submap ops --- src/Data/Dependent/EnumMap/Strict/Internal.hs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') 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 -- cgit v1.2.3-70-g09d2