@@ -0,0 +1,20 @@
1+{-# LANGUAGE DataKinds, TypeOperators, FlexibleInstances, FlexibleContexts, GADTs #-}
2+
3+import Data.Type.Set
4+
5+instance Nubable ((v :-> a) ': s) => Nubable ((v :-> a) ': (v :-> a) ': s) where
6+ nub (Ext _ (Ext x xs)) = nub (Ext x xs)
7+
8+foo :: Set '["x" :-> Integer, "z" :-> Integer, "w" :-> Integer]
9+foo = Ext ((Var :: (Var "x")) :-> 2) $
10+ Ext ((Var :: (Var "z")) :-> 4) $
11+ Ext ((Var :: (Var "w")) :-> 5) $
12+ Empty
13+
14+bar :: Set '["y" :-> Integer, "w" :-> Integer]
15+bar = Ext ((Var :: (Var "y")) :-> 3) $
16+ Ext ((Var :: (Var "w")) :-> 1) $
17+ Empty
18+
19+foobar :: Set '["w" :-> Integer, "x" :-> Integer, "y" :-> Integer, "z" :-> Integer]
20+foobar = foo `union` bar