packages feed

appendmap 0.1.1 → 0.1.2

raw patch · 6 files changed

+110/−35 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Map.Append: AppendMap :: Map k v -> AppendMap k v
- Data.Map.Append: [unAppendMap] :: AppendMap k v -> Map k v
- Data.Map.Append: instance (GHC.Classes.Ord k, GHC.Base.Semigroup v) => GHC.Base.Monoid (Data.Map.Append.AppendMap k v)
- Data.Map.Append: instance (GHC.Classes.Ord k, GHC.Base.Semigroup v) => GHC.Base.Semigroup (Data.Map.Append.AppendMap k v)
- Data.Map.Append: newtype AppendMap k v
+ Data.Map.Append.Lazy: AppendMap :: Map k v -> AppendMap k v
+ Data.Map.Append.Lazy: [unAppendMap] :: AppendMap k v -> Map k v
+ Data.Map.Append.Lazy: instance (GHC.Classes.Ord k, GHC.Base.Semigroup v) => GHC.Base.Monoid (Data.Map.Append.Lazy.AppendMap k v)
+ Data.Map.Append.Lazy: instance (GHC.Classes.Ord k, GHC.Base.Semigroup v) => GHC.Base.Semigroup (Data.Map.Append.Lazy.AppendMap k v)
+ Data.Map.Append.Lazy: newtype AppendMap k v
+ Data.Map.Append.Strict: AppendMap :: Map k v -> AppendMap k v
+ Data.Map.Append.Strict: [unAppendMap] :: AppendMap k v -> Map k v
+ Data.Map.Append.Strict: instance (GHC.Classes.Ord k, GHC.Base.Semigroup v) => GHC.Base.Monoid (Data.Map.Append.Strict.AppendMap k v)
+ Data.Map.Append.Strict: instance (GHC.Classes.Ord k, GHC.Base.Semigroup v) => GHC.Base.Semigroup (Data.Map.Append.Strict.AppendMap k v)
+ Data.Map.Append.Strict: newtype AppendMap k v

Files

ChangeLog.md view
@@ -2,6 +2,10 @@  ## Unreleased changes +## 0.1.2++* Wrappers for lazy and strict versions of `Data.Map`.+ ## 0.1.1  * Initial release on Hackage.
appendmap.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: a323dd29d1810894fafc021571b49e8c3ca23a22516736fe70ec955cec2be6e4+-- hash: 958b11931b57f7dbce792ef791245c3d6ae3eef40e24559c9e2520da0c867296  name:           appendmap-version:        0.1.1+version:        0.1.2 synopsis:       Map with a Semigroup and Monoid instances delegating to Semigroup of the elements description:    Please see the README on GitHub at <https://github.com/koterpillar/appendmap#readme> category:       Data Structures@@ -29,6 +29,8 @@ library   exposed-modules:       Data.Map.Append+      Data.Map.Append.Lazy+      Data.Map.Append.Strict   other-modules:       Paths_appendmap   hs-source-dirs:
src/Data/Map/Append.hs view
@@ -1,22 +1,5 @@-module Data.Map.Append where--import           Data.Map           (Map)-import qualified Data.Map           as Map--import           Data.Monoid        hiding ((<>))-import           Data.Semigroup--import qualified Data.List.NonEmpty as NE--newtype AppendMap k v = AppendMap-  { unAppendMap :: Map k v-  }--instance (Ord k, Semigroup v) => Semigroup (AppendMap k v) where-  AppendMap a <> AppendMap b = AppendMap $ Map.unionWith (<>) a b-  sconcat = AppendMap . Map.unionsWith (<>) . NE.toList . fmap unAppendMap+module Data.Map.Append+  ( module Data.Map.Append.Lazy+  ) where -instance (Ord k, Semigroup v) => Monoid (AppendMap k v) where-  mempty = AppendMap Map.empty-  mappend = (<>)-  mconcat = AppendMap . Map.unionsWith (<>) . fmap unAppendMap+import           Data.Map.Append.Lazy
+ src/Data/Map/Append/Lazy.hs view
@@ -0,0 +1,22 @@+module Data.Map.Append.Lazy where++import           Data.Map           (Map)+import qualified Data.Map           as Map++import           Data.Monoid        hiding ((<>))+import           Data.Semigroup++import qualified Data.List.NonEmpty as NE++newtype AppendMap k v = AppendMap+  { unAppendMap :: Map k v+  }++instance (Ord k, Semigroup v) => Semigroup (AppendMap k v) where+  AppendMap a <> AppendMap b = AppendMap $ Map.unionWith (<>) a b+  sconcat = AppendMap . Map.unionsWith (<>) . NE.toList . fmap unAppendMap++instance (Ord k, Semigroup v) => Monoid (AppendMap k v) where+  mempty = AppendMap Map.empty+  mappend = (<>)+  mconcat = AppendMap . Map.unionsWith (<>) . fmap unAppendMap
+ src/Data/Map/Append/Strict.hs view
@@ -0,0 +1,22 @@+module Data.Map.Append.Strict where++import           Data.Map.Strict    (Map)+import qualified Data.Map.Strict    as Map++import           Data.Monoid        hiding ((<>))+import           Data.Semigroup++import qualified Data.List.NonEmpty as NE++newtype AppendMap k v = AppendMap+  { unAppendMap :: Map k v+  }++instance (Ord k, Semigroup v) => Semigroup (AppendMap k v) where+  AppendMap a <> AppendMap b = AppendMap $ Map.unionWith (<>) a b+  sconcat = AppendMap . Map.unionsWith (<>) . NE.toList . fmap unAppendMap++instance (Ord k, Semigroup v) => Monoid (AppendMap k v) where+  mempty = AppendMap Map.empty+  mappend = (<>)+  mconcat = AppendMap . Map.unionsWith (<>) . fmap unAppendMap
test/Spec.hs view
@@ -1,18 +1,60 @@-import qualified Data.Map        as Map-import           Data.Map.Append+{-# LANGUAGE AllowAmbiguousTypes    #-}+{-# LANGUAGE RankNTypes             #-}+{-# LANGUAGE RecordWildCards        #-} +import qualified Data.Map.Append.Lazy   as Lazy+import qualified Data.Map.Lazy          as Lazy++import qualified Data.Map.Append.Strict as Strict+import qualified Data.Map.Strict        as Strict+ import           Data.Semigroup  import           Test.Hspec +data AppendMap appendmap map = AppendMap+  { mapFromList :: [(Int, String)] -> map Int String+  , mapEmpty    :: map Int String+  , appendMap   :: forall k v. map k v -> appendmap k v+  , unAppendMap :: forall k v. appendmap k v -> map k v+  }++lazy :: AppendMap Lazy.AppendMap Lazy.Map+lazy =+  AppendMap+    { mapFromList = Lazy.fromList+    , mapEmpty = Lazy.empty+    , appendMap = Lazy.AppendMap+    , unAppendMap = Lazy.unAppendMap+    }++strict :: AppendMap Strict.AppendMap Strict.Map+strict =+  AppendMap+    { mapFromList = Strict.fromList+    , mapEmpty = Strict.empty+    , appendMap = Strict.AppendMap+    , unAppendMap = Strict.unAppendMap+    }++appendMapSpec ::+     ( Show (map Int String)+     , Eq (map Int String)+     , Monoid (map Int String)+     , Monoid (appendmap Int String)+     )+  => AppendMap appendmap map+  -> Spec+appendMapSpec AppendMap {..} = do+  it "has empty element" $+    unAppendMap mempty `shouldBe` mapEmpty+  it "combines elements" $ do+    let one = appendMap $ mapFromList [(1, "hello"), (2, "goodbye")]+    let two = appendMap $ mapFromList [(1, "world"), (3, "again")]+    unAppendMap (one <> two) `shouldBe`+      mapFromList [(1, "helloworld"), (2, "goodbye"), (3, "again")]+ main :: IO ()-main =-  hspec $-  describe "AppendMap" $ do-    it "has empty element" $-      unAppendMap (mempty :: AppendMap Int String) `shouldBe` Map.empty-    it "combines elements" $ do-      let one = AppendMap $ Map.fromList [(1, "hello"), (2, "goodbye")]-      let two = AppendMap $ Map.fromList [(1, "world"), (3, "again")]-      unAppendMap (one <> two) `shouldBe`-        Map.fromList [(1, "helloworld"), (2, "goodbye"), (3, "again")]+main = hspec $ do+  describe "Data.Map.Append.Lazy" $ appendMapSpec lazy+  describe "Data.Map.Append.Strict" $ appendMapSpec strict