open OrderedSig
open FsetSig

module UnbalancedSet (Element : Ordered) : Fset =
struct
   type elem = Element.t
   type tree = Empty | Node of tree * elem * tree
   type set = tree

   let empty = Empty

   let rec member x = function
      | Empty -> false
      | Node (a,y,b) -> 
         if Element.lt x y then member x a
         else if Element.lt y x then member x b
         else true

   let rec insert x = function
      | Empty -> Node (Empty,x,Empty)
      | Node (a,y,b) as s ->
         if Element.lt x y then Node (insert x a, y, b)
         else if Element.lt y x then Node (a, y, insert x b)
         else s
end