delete x (Bin s a l r)   = case x `compare` a of
  LT -> let l' = delete x l in Bin (s + size l' - size l) a l' r
  GT -> let r' = delete x r in Bin (s + size r' - size r) a l r'
  EQ -> l `union` r
delete x (Bin s a l r)   = case x `compare` a of
  LT -> let l' = delete x l in Bin (s + size l' - size l) a l' r
  GT -> let r' = delete x r in Bin (s + size r' - size r) a l r'
  EQ -> l `union` r
delete x (Bin s a l r)   = case x `compare` a of
  LT -> let l' = delete x l in Bin (s + size l' - size l) a l' r
  GT -> let r' = delete x r in Bin (s + size r' - size r) a l r'
  EQ -> l `union` r