check-pvp-0.0.2.1: src/ModuleSet.hs
module ModuleSet where
import qualified Language.Haskell.Exts.Syntax as Syntax
import qualified Data.Set as Set
import Data.Set (Set, )
data T =
Content (Set Syntax.ModuleName)
| Complement (Set Syntax.ModuleName)
fromSet :: Set Syntax.ModuleName -> T
fromSet = Content
full :: T
full = Complement Set.empty
member :: Syntax.ModuleName -> T -> Bool
member modu (Content set) = Set.member modu set
member modu (Complement set) = not $ Set.member modu set
insert :: Syntax.ModuleName -> T -> T
insert modu (Content set) = Content $ Set.insert modu set
insert modu (Complement set) = Complement $ Set.delete modu set
delete :: Syntax.ModuleName -> T -> T
delete modu (Content set) = Content $ Set.delete modu set
delete modu (Complement set) = Complement $ Set.insert modu set
insertSet :: Set Syntax.ModuleName -> T -> T
insertSet new (Content set) = Content $ Set.union new set
insertSet new (Complement set) = Complement $ Set.difference set new
deleteSet :: Set Syntax.ModuleName -> T -> T
deleteSet new (Content set) = Content $ Set.difference set new
deleteSet new (Complement set) = Complement $ Set.union new set