module TypeMachine.Internal.Utils (removeKeys, keepKeys) where

import qualified Data.Map.Strict as Map

removeKeys :: (Eq k) => [k] -> Map.Map k v -> Map.Map k v
removeKeys :: forall k v. Eq k => [k] -> Map k v -> Map k v
removeKeys [k]
keys = (k -> v -> Bool) -> Map k v -> Map k v
forall k a. (k -> a -> Bool) -> Map k a -> Map k a
Map.filterWithKey (\k
k v
_ -> k
k k -> [k] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [k]
keys)

keepKeys :: (Eq k) => [k] -> Map.Map k v -> Map.Map k v
keepKeys :: forall k v. Eq k => [k] -> Map k v -> Map k v
keepKeys [k]
keys = (k -> v -> Bool) -> Map k v -> Map k v
forall k a. (k -> a -> Bool) -> Map k a -> Map k a
Map.filterWithKey (\k
k v
_ -> k
k k -> [k] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` [k]
keys)