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]