packages feed

ptera-core-0.1.0.0: src/Language/Parser/Ptera/Data/Alignable/Set.hs

module Language.Parser.Ptera.Data.Alignable.Set (
    T,
    Set,
    empty,
    singleton,
    insert,
    delete,
    fromList,
    toList,
    null,
    intersection,
    union,
    difference,
    length,
    member,
) where

import           Language.Parser.Ptera.Prelude        hiding (empty, length,
                                                       null, toList)

import qualified Data.IntSet                          as IntSet
import qualified Language.Parser.Ptera.Data.Alignable as Alignable


type T = Set

newtype Set n = Set IntSet.IntSet
    deriving (Eq, Show)
    deriving Semigroup via IntSet.IntSet

empty :: Set n
empty = coerce IntSet.empty

singleton :: Alignable.T n => n -> Set n
singleton = coerce IntSet.singleton

insert :: Alignable.T n => n -> Set n -> Set n
insert = coerce IntSet.insert

delete :: Alignable.T n => n -> Set n -> Set n
delete = coerce IntSet.delete

fromList :: Alignable.T n => [n] -> Set n
fromList = coerce IntSet.fromList

toList :: Alignable.T n => Set n -> [n]
toList = coerce IntSet.toList

null :: Set n -> Bool
null = coerce IntSet.null

intersection :: Set n -> Set n -> Set n
intersection = coerce IntSet.intersection

difference :: Set n -> Set n -> Set n
difference = coerce IntSet.difference

union :: Set n -> Set n -> Set n
union = coerce IntSet.union

length :: Set n -> Int
length = coerce IntSet.size

member :: Alignable.T n => n -> Set n -> Bool
member = coerce IntSet.member