appendmap: Map with a Semigroup and Monoid instances delegating to Semigroup of the elements

[ bsd3, data-structures, library ] [ Propose Tags ]

Please see the README on GitHub at

[Skip to Readme]
Versions [faq] 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5
Change log
Dependencies base (>=4.7 && <5), containers [details]
License BSD-3-Clause
Copyright 2018 Alexey Kotlyarov
Author Alexey Kotlyarov
Category Data Structures
Home page
Bug tracker
Source repo head: git clone
Uploaded by AlexeyKotlyarov at Mon Aug 20 10:41:53 UTC 2018
Distributions LTSHaskell:0.1.5, NixOS:0.1.5, Stackage:0.1.5
Downloads 346 total (88 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2018-08-20 [all 1 reports]


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees

Readme for appendmap-0.1.1

[back to package description]


Build status Hackage Stackage LTS Hackage dependencies

A Data.Map wrapper with a Semigroup and Monoid instances that delegate to the individual keys.

import qualified Data.Map as Map
import Data.Map.Append

> one = AppendMap $ Map.fromList [(1, "hello"), (2, "goodbye")]
> two = AppendMap $ Map.fromList [(1, "world"), (3, "again")]

> unAppendMap (one <> two)
fromList [(1, "helloworld"), (2, "goodbye"), (3, "again")]


Data.Map has a Semigroup instance that keeps the values from the first argument in case of a key conflict:

import qualified Data.Map as Map
import Data.Map.Append

> Map.fromList [(1, "hello")] <> Map.fromList [(1, "goodbye")]
fromList [(1, "hello")]

A different instance has been suggested for a long time (1, 2), but this is a breaking change and hasn't happened yet (as of 2018-08).


Source code is formatted with hindent then stylish-haskell.


  • Run ./bumpversion patch|minor|major. This will create a new version and push it to the repository to be released.