@@ -7,7 +7,7 @@ module Data.Type.Set (Set(..), Union, Unionable, union, quicksort, append,
7 Sort, Sortable, (:++), Split(..), Cmp, Filter, Flag(..),
7 Sort, Sortable, (:++), Split(..), Cmp, Filter, Flag(..),
8 Nub, Nubable(..), AsSet, asSet, IsSet, Subset(..),
8 Nub, Nubable(..), AsSet, asSet, IsSet, Subset(..),
9 Delete(..), Proxy(..), remove, Remove, (:\),
9 Delete(..), Proxy(..), remove, Remove, (:\),
10− Member) where
10+ Member(..), NonMember, MemberP(..)) where
12import GHC.TypeLits
12import GHC.TypeLits
13import Data.Type.Bool
13import Data.Type.Bool
@@ -227,3 +227,10 @@ instance {-# OVERLAPS #-} Member a (a ': s) where
228instance {-# OVERLAPPABLE #-} Member a s => Member a (b ': s) where
228instance {-# OVERLAPPABLE #-} Member a s => Member a (b ': s) where
229 member a (Ext _ xs) = member a xs
229 member a (Ext _ xs) = member a xs
231+type family MemberP a s :: Bool where
232+ MemberP a '[] = False
233+ MemberP a (a ': s) = True
234+ MemberP a (b ': s) = MemberP a s
236+type NonMember a s = MemberP a s ~ False