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
|