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