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,7 @@
 module Data.Type.Set (Set(..), Union, Unionable, union, quicksort, append,
                       Sort, Sortable, (:++), Split(..), Cmp, Filter, Flag(..),
                       Nub, Nubable(..), AsSet, asSet, IsSet, Subset(..),
-                      Delete(..), Proxy(..)) where
+                      Delete(..), Proxy(..), remove, Remove, (:\)) where
 
 import GHC.TypeLits
 import Data.Type.Bool
@@ -73,6 +73,25 @@
 append Empty x = x
 append (Ext e xs) ys = Ext e (append xs ys)
 
+{-| Delete elements from a set -}
+type family (m :: [k]) :\ (x :: k) :: [k] where
+     '[]       :\ x = '[]
+     (x ': xs) :\ x = xs
+     (y ': xs) :\ x = y ': (xs :\ x)
+
+class Remove s t where
+  remove :: Set s -> Proxy t -> Set (s :\ t)
+
+instance Remove '[] t where
+  remove Empty Proxy = Empty
+
+instance {-# OVERLAPS #-} Remove (x ': xs) x where
+  remove (Ext _ xs) Proxy = xs
+
+instance {-# OVERLAPPABLE #-} (((y : xs) :\ x) ~ (y : (xs :\ x)), Remove xs x)
+      => Remove (y ': xs) x where
+  remove (Ext y xs) (x@Proxy) = Ext y (remove xs x)
+
 {-| Splitting a union a set, given the sets we want to split it into -}
 class Split s t st where
    -- where st ~ Union s t
@@ -93,8 +112,6 @@
    split (Ext x st) = let (s, t) = split st
                       in  (s, Ext x t)
 
-
-
 {-| Remove duplicates from a sorted list -}
 type family Nub t where
     Nub '[]           = '[]
@@ -130,10 +147,10 @@
 instance Subset '[] '[] where
    subset xs = Empty
 
-instance Subset s t => Subset s (x ': t) where
+instance {-# OVERLAPPABLE #-} Subset s t => Subset s (x ': t) where
    subset (Ext _ xs) = subset xs
 
-instance Subset s t => Subset (x ': s) (x ': t) where
+instance {-# OVERLAPS #-} Subset s t => Subset (x ': s) (x ': t) where
    subset (Ext x xs) = Ext x (subset 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.5.0
+version:                0.8.6.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
