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