diff --git a/src/Data/Type/Map.hs b/src/Data/Type/Map.hs
--- a/src/Data/Type/Map.hs
+++ b/src/Data/Type/Map.hs
@@ -84,7 +84,7 @@
 instance {-# OVERLAPS #-} IsMember v t ((v ':-> t) ': m) where
   lookp _ (Ext _ x _) = x
 
-instance IsMember v t m => IsMember v t (x ': m) where
+instance {-# OVERLAPPABLE #-} IsMember v t m => IsMember v t (x ': m) where
   lookp v (Ext _ _ m) = lookp v m
 
 
diff --git a/src/Data/Type/Set.hs b/src/Data/Type/Set.hs
--- a/src/Data/Type/Set.hs
+++ b/src/Data/Type/Set.hs
@@ -6,7 +6,8 @@
 module Data.Type.Set (Set(..), Union, Unionable, union, quicksort, append,
                       Sort, Sortable, (:++), Split(..), Cmp, Filter, Flag(..),
                       Nub, Nubable(..), AsSet, asSet, IsSet, Subset(..),
-                      Delete(..), Proxy(..), remove, Remove, (:\)) where
+                      Delete(..), Proxy(..), remove, Remove, (:\),
+                      Member) where
 
 import GHC.TypeLits
 import Data.Type.Bool
@@ -15,7 +16,7 @@
 data Proxy (p :: k) = Proxy
 
 -- Value-level 'Set' representation,  essentially a list
-data Set (n :: [*]) where
+data Set (n :: [k]) :: * where
     {--| Construct an empty set -}
     Empty :: Set '[]
     {--| Extend a set with an element -}
@@ -215,3 +216,14 @@
 {-| Open-family for the ordering operation in the sort -}
 
 type family Cmp (a :: k) (b :: k) :: Ordering
+
+{-| Membership of an element in a set, with an acommanying
+    value-level function that returns a bool -}
+class Member a s where
+  member :: Proxy a -> Set s -> Bool
+
+instance {-# OVERLAPS #-} Member a (a ': s) where
+  member _ (Ext x _) = True
+
+instance {-# OVERLAPPABLE #-} Member a s => Member a (b ': s) where
+  member a (Ext _ xs) = member a xs
diff --git a/type-level-sets.cabal b/type-level-sets.cabal
--- a/type-level-sets.cabal
+++ b/type-level-sets.cabal
@@ -1,5 +1,5 @@
 name:                   type-level-sets
-version:                0.8.6.0
+version:                0.8.7.0
 synopsis:               Type-level sets and finite maps (with value-level counterparts)
 description:            
    This package provides type-level sets (no duplicates, sorted to provide a normal form) via 'Set' and type-level
