packages feed

hydrogen-multimap 0.1 → 0.3

raw patch · 3 files changed

Files

README.md view
@@ -0,0 +1,14 @@+hydrogen-multimap+=================++[![Build Status](https://travis-ci.org/scravy/hydrogen-multimap.svg?branch=master)](https://travis-ci.org/scravy/hydrogen-multimap)++A very simple, basic implementation of a MultiMap (a map that associates+a single key with multiple values).++This MultiMap is basically a `Map k [v]` (multiple keys are backed by Lists).+++ Hackage: [`hackage.haskell.org/package/hydrogen-multimap`](http://hackage.haskell.org/package/hydrogen-multimap)++ Haddock: [`hackage.haskell.org/package/hydrogen-multimap-0.1/docs/Hydrogen-MultiMap.html`](http://hackage.haskell.org/package/hydrogen-multimap-0.1/docs/Hydrogen-MultiMap.html)++
hydrogen-multimap.cabal view
@@ -1,5 +1,5 @@ name:                 hydrogen-multimap-version:              0.1+version:              0.3 homepage:             https://scravy.de/hydrogen-multimap/ synopsis:             Hydrogen Multimap license:              MIT@@ -17,8 +17,9 @@  library   exposed-modules:    Hydrogen.MultiMap-  build-depends:      base ==4.7.*-                      , containers ==0.5.*+  build-depends:      base >=4.5 && <5+                      , containers >=0.4.2.1+                      , ghc-prim   hs-source-dirs:     src   ghc-options:        -Wall   default-language:   Haskell2010@@ -29,9 +30,5 @@                        , DeriveGeneric                        , DeriveTraversable                        , GADTs-                       , LambdaCase-                       , MultiWayIf-                       , NoImplicitPrelude                        , ScopedTypeVariables-                       , TypeFamilies 
src/Hydrogen/MultiMap.hs view
@@ -30,12 +30,13 @@  import GHC.Generics (Generic) -import Data.Map (Map)-import Data.Set (Set)- import qualified Data.Map as Map+import qualified Data.Set as Set import qualified Data.List as List +type Map = Map.Map+type Set = Set.Set+ data MultiMap k v = MultiMap (Map k [v]) Int   deriving (Eq, Ord, Functor, Foldable, Traversable, Generic, Typeable) @@ -115,10 +116,16 @@ fromList' :: Ord k => [(k, v)] -> MultiMap k v fromList' = foldr (uncurry insert) empty -fromSet :: Ord k => (k -> [v]) -> Set k -> MultiMap k v+fromSet :: forall k. forall v. Ord k => (k -> [v]) -> Set k -> MultiMap k v fromSet f s = MultiMap m (count m)   where+    m :: Map k [v]+#if MIN_VERSION_containers(5,0,0)     m = Map.fromSet f s+#else+    m = Map.fromList $ zip xs (map f xs)+    xs = Set.toList s+#endif  union :: Ord k => MultiMap k v -> MultiMap k v -> MultiMap k v union (MultiMap m1 s1) (MultiMap m2 s2) = MultiMap (Map.unionWith (++) m1 m2) (s1 + s2)