packages feed

check-pvp-0.0.3: src/ModuleSet.hs

module ModuleSet where

import qualified Language.Haskell.Exts.Syntax as Syntax

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


type ModuleName = Syntax.ModuleName ()

data T =
     Content (Set ModuleName)
   | Complement (Set ModuleName)


fromSet :: Set ModuleName -> T
fromSet = Content

full :: T
full = Complement Set.empty


member :: ModuleName -> T -> Bool
member modu (Content set) = Set.member modu set
member modu (Complement set) = not $ Set.member modu set


insert :: ModuleName -> T -> T
insert modu (Content set) = Content $ Set.insert modu set
insert modu (Complement set) = Complement $ Set.delete modu set

delete :: ModuleName -> T -> T
delete modu (Content set) = Content $ Set.delete modu set
delete modu (Complement set) = Complement $ Set.insert modu set


insertSet :: Set ModuleName -> T -> T
insertSet new (Content set) = Content $ Set.union new set
insertSet new (Complement set) = Complement $ Set.difference set new

deleteSet :: Set ModuleName -> T -> T
deleteSet new (Content set) = Content $ Set.difference set new
deleteSet new (Complement set) = Complement $ Set.union new set