@@ -0,0 +1,50 @@
4+interface SetSig a where
5+ data Set : Type -> Type where MkSet : List a -> Set a
8+ insert : a -> Set a -> Set a
9+ member : a -> Set a -> Bool
11+data Tree a = Leaf | Node (Tree a) a (Tree a)
18+ [TreeSet] Ord a => SetSig a where
24+ insert x Leaf = Node Leaf x Leaf
25+ insert x (Node l val r) = case compare x val of
26+ LT => Node (insert x l) val r
28+ GT => Node l val (insert x r)
30+ member x Leaf = False
31+ member x (Node l val r) = case compare x val of
36+using implementation TreeSet
38+ test : Set @{TreeSet {a=Nat}} Nat