module Data.Map.Counter where

import           Data.Map.Append.Strict
import           Data.Map.Strict        (Map)
import qualified Data.Map.Strict        as Map

import           Data.Monoid

type Counter key = AppendMap key (Sum Int)

mkCounter :: Ord key => key -> Counter key
mkCounter key = AppendMap $ Map.singleton key (Sum 1)

getCounts :: Counter key -> Map key Int
getCounts = Map.map getSum . unAppendMap