merge h0@(Node _ e0 l0 r0) h1@(Node _ e1 l1 r1)
  | e0 <= e1  = create e0 l0 (merge r0 h1)
  | otherwise = create e1 l1 (merge h0 r1)
merge h0@(Node _ e0 l0 r0) h1@(Node _ e1 l1 r1)
  | e0 <= e1  = create e0 l0 (merge r0 h1)
  | otherwise = create e1 l1 (merge h0 r1)
merge h0@(Node _ e0 l0 r0) h1@(Node _ e1 l1 r1)
  | e0 <= e1  = create e0 l0 (merge r0 h1)
  | otherwise = create e1 l1 (merge h0 r1)