packages feed

incremental-maps-0.0.0.0: src/library/Data/Incremental/Set.hs

module Data.Incremental.Set (
    AtomicChange (Delete, Insert)  
) where


-- Data

import           Data.Set (Set)
import qualified Data.Set as Set
import           Data.Monoid (Monoid (mempty, mappend))
import           Data.MultiChange (MultiChange)
import qualified Data.MultiChange as MultiChange
import           Data.Incremental

-- Benchmarking 

import GHC.Generics

-- * Changes

instance (Ord k) => Changeable (Set k) where

    type DefaultChange (Set k) = MultiChange (AtomicChange k)

-- * Atomic changes

data AtomicChange k = Delete k | Insert k deriving (Show,Generic)

instance (Ord k) => Change (AtomicChange k) where

    type Value (AtomicChange k) = Set k

    Delete k  $$ seq = Set.delete k seq
    Insert k  $$ seq = Set.insert k seq