module Data.Containers.Monad where

import Definitive.Base
import Data.Containers

instance (Monoid k,Ord k) => Unit (Map k) where
  pure a = singleton zero a
instance (Monoid k,Ord k) => Applicative (Map k)
instance (Monoid k,Ord k) => Monad (Map k) where
  join m = foldMap fun (m^.keyed)
    where fun (k,m') = m' & ascList %~ \l -> [(k+k',a) | (k',a) <- l]