diff options
Diffstat (limited to 'src/Data/Dependent/EnumMap/Strict')
-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 |