{-# OPTIONS_GHC -Wno-orphans #-}

module CRDT.Cv.GSet
    ( GSet
    , add
    , initial
    , query
    ) where

import           Data.Semilattice (Semilattice)
import           Data.Set (Set)
import qualified Data.Set as Set

-- | Grow-only set
type GSet = Set

instance Ord a => Semilattice (Set a)

-- | update
add :: Ord a => a -> GSet a -> GSet a
add = Set.insert

-- | initialization
initial :: GSet a
initial = Set.empty

query :: Ord a => a -> GSet a -> Bool
query = Set.member