From 025eac26d8c2302ce9f5762662a3e7ca36206a09 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Mon, 8 Dec 2014 18:44:34 +0000 Subject: [PATCH 1/2] Add semigroup instance --- README.md | 2 ++ src/Data/Map.purs | 3 +++ 2 files changed, 5 insertions(+) diff --git a/README.md b/README.md index e79be4f6..8ff0b8b9 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ instance functorMap :: P.Functor (Map k) + instance semigroupMap :: (P.Ord k) => P.Semigroup (Map k v) + instance showMap :: (P.Show k, P.Show v) => P.Show (Map k v) instance traversableMap :: (P.Ord k) => Traversable (Map k) diff --git a/src/Data/Map.purs b/src/Data/Map.purs index fd60efd4..b2ecc758 100644 --- a/src/Data/Map.purs +++ b/src/Data/Map.purs @@ -47,6 +47,9 @@ instance eqMap :: (P.Eq k, P.Eq v) => P.Eq (Map k v) where instance showMap :: (P.Show k, P.Show v) => P.Show (Map k v) where show m = "fromList " P.++ P.show (toList m) +instance semigroupMap :: (P.Ord k) => P.Semigroup (Map k v) where + (<>) = union + instance functorMap :: P.Functor (Map k) where (<$>) _ Leaf = Leaf (<$>) f (Two left k v right) = Two (f P.<$> left) k (f v) (f P.<$> right) From 166e3a064e6c7218acb5920e292b7fedaf133155 Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Mon, 8 Dec 2014 21:12:45 +0000 Subject: [PATCH 2/2] Add Monoid instance for Map k v --- README.md | 2 ++ src/Data/Map.purs | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 8ff0b8b9..43f5ce35 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ instance functorMap :: P.Functor (Map k) + instance monoidMap :: (P.Ord k) => Monoid (Map k v) + instance semigroupMap :: (P.Ord k) => P.Semigroup (Map k v) instance showMap :: (P.Show k, P.Show v) => P.Show (Map k v) diff --git a/src/Data/Map.purs b/src/Data/Map.purs index b2ecc758..1a75b137 100644 --- a/src/Data/Map.purs +++ b/src/Data/Map.purs @@ -32,6 +32,7 @@ import qualified Prelude as P import qualified Data.Array as A import Data.Maybe import Data.Tuple +import Data.Monoid (Monoid) import Data.Foldable (foldl, foldMap, foldr, Foldable) import Data.Traversable (traverse, Traversable) @@ -50,6 +51,9 @@ instance showMap :: (P.Show k, P.Show v) => P.Show (Map k v) where instance semigroupMap :: (P.Ord k) => P.Semigroup (Map k v) where (<>) = union +instance monoidMap :: (P.Ord k) => Monoid (Map k v) where + mempty = empty + instance functorMap :: P.Functor (Map k) where (<$>) _ Leaf = Leaf (<$>) f (Two left k v right) = Two (f P.<$> left) k (f v) (f P.<$> right)