diff --git a/README.md b/README.md index e79be4f6..43f5ce35 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ 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) instance traversableMap :: (P.Ord k) => Traversable (Map k) diff --git a/src/Data/Map.purs b/src/Data/Map.purs index fd60efd4..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) @@ -47,6 +48,12 @@ 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 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)