on master help sign in
Add Data.Map.Utils for things I feel like I end up writing often
commit9ab8b60dd1daaa237c4018164f907ba95e6374bf authorEvan Czaplicki <evancz@users.noreply.github.com> dateSun 24 Mar 2019, 15:29 (8 years ago) parent7c1f925
1 file changed+37
compiler/src/Data/Map/Utils.hs+37
compiler/src/Data/Map/Utils.hsnew file+37
@@ -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