minesweeper-0.8.8: Data/ChangeSet.hs
module Data.ChangeSet
( Set
, changes
, forget
, insert
, delete
, size
, empty
, member
, notMember
, fromList
, fromDistinctAscList
, toList
, (\\)
) where
import qualified Data.Set as M
import Data.Binary
{-
import Control.Monad
import Data.DeriveTH
import Data.Derive.Binary
-}
------------------------------
data Set k = ChangeSet
{ toSet :: M.Set k
, changes :: [k]
}
deriving (Show, Read)
forget (ChangeSet m _) = ChangeSet m []
fromSet s = ChangeSet s (M.toList s)
----------------------
insert k (ChangeSet m c) = ChangeSet (M.insert k m) (k: c)
delete k (ChangeSet m c) = ChangeSet (M.delete k m) (k: c)
size = M.size . toSet
member k = M.member k . toSet
notMember k = M.notMember k . toSet
toList = M.toList . toSet
empty = fromSet $ M.empty
fromList = fromSet . M.fromList
fromDistinctAscList = fromSet . M.fromDistinctAscList
a \\ b = fromSet (toSet a M.\\ toSet b)
instance (Ord k, Binary k) => Binary (Set k) where
put = put . toSet
get = fmap fromSet get
-- $( derive makeBinary ''Set )