@@ -0,0 +1,37 @@
1+module Data.Map.Utils
2+ ( fromKeys
3+ , fromKeysA
4+ , any
5+ )
6+ where
7+
8+
9+import Prelude hiding (any)
10+import qualified Data.Map as Map
11+import Data.Map.Internal (Map(..))
12+
13+
14+
15+-- FROM KEYS
16+
17+
18+fromKeys :: (Ord k) => (k -> v) -> [k] -> Map.Map k v
19+fromKeys toValue keys =
20+ Map.fromList $ map (\k -> (k, toValue k)) keys
21+
22+
23+fromKeysA :: (Applicative f, Ord k) => (k -> f v) -> [k] -> f (Map.Map k v)
24+fromKeysA toValue keys =
25+ Map.fromList <$> traverse (\k -> (,) k <$> toValue k) keys
26+
27+
28+
29+-- ANY
30+
31+
32+{-# INLINE any #-}
33+any :: (v -> Bool) -> Map.Map k v -> Bool
34+any isGood = go
35+ where
36+ go Tip = False
37+ go (Bin _ _ v l r) = isGood v || go l || go r