1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
{-
(c) The University of Glasgow 2006
(c) The GRASP/AQUA Project, Glasgow University, 1992-1998
-}
{-# LANGUAGE CPP #-}
module GHC.Core.TyCon.Set (
-- * TyCons set type
TyConSet,
-- ** Manipulating these sets
emptyTyConSet, unitTyConSet, mkTyConSet, unionTyConSet, unionTyConSets,
minusTyConSet, elemTyConSet, extendTyConSet, extendTyConSetList,
delFromTyConSet, delListFromTyConSet, isEmptyTyConSet, filterTyConSet,
intersectsTyConSet, disjointTyConSet, intersectTyConSet,
nameSetAny, nameSetAll
) where
import GHC.Prelude
import GHC.Types.Unique.Set
import GHC.Core.TyCon (TyCon)
type TyConSet = UniqSet TyCon
emptyTyConSet :: TyConSet
unitTyConSet :: TyCon -> TyConSet
extendTyConSetList :: TyConSet -> [TyCon] -> TyConSet
extendTyConSet :: TyConSet -> TyCon -> TyConSet
mkTyConSet :: [TyCon] -> TyConSet
unionTyConSet :: TyConSet -> TyConSet -> TyConSet
unionTyConSets :: [TyConSet] -> TyConSet
minusTyConSet :: TyConSet -> TyConSet -> TyConSet
elemTyConSet :: TyCon -> TyConSet -> Bool
isEmptyTyConSet :: TyConSet -> Bool
delFromTyConSet :: TyConSet -> TyCon -> TyConSet
delListFromTyConSet :: TyConSet -> [TyCon] -> TyConSet
filterTyConSet :: (TyCon -> Bool) -> TyConSet -> TyConSet
intersectTyConSet :: TyConSet -> TyConSet -> TyConSet
intersectsTyConSet :: TyConSet -> TyConSet -> Bool
-- ^ True if there is a non-empty intersection.
-- @s1 `intersectsTyConSet` s2@ doesn't compute @s2@ if @s1@ is empty
disjointTyConSet :: TyConSet -> TyConSet -> Bool
isEmptyTyConSet = isEmptyUniqSet
emptyTyConSet = emptyUniqSet
unitTyConSet = unitUniqSet
mkTyConSet = mkUniqSet
extendTyConSetList = addListToUniqSet
extendTyConSet = addOneToUniqSet
unionTyConSet = unionUniqSets
unionTyConSets = unionManyUniqSets
minusTyConSet = minusUniqSet
elemTyConSet = elementOfUniqSet
delFromTyConSet = delOneFromUniqSet
filterTyConSet = filterUniqSet
intersectTyConSet = intersectUniqSets
disjointTyConSet = disjointUniqSets
delListFromTyConSet set ns = foldl' delFromTyConSet set ns
intersectsTyConSet s1 s2 = not (isEmptyTyConSet (s1 `intersectTyConSet` s2))
nameSetAny :: (TyCon -> Bool) -> TyConSet -> Bool
nameSetAny = uniqSetAny
nameSetAll :: (TyCon -> Bool) -> TyConSet -> Bool
nameSetAll = uniqSetAll
|