splitRoot (IntMap (WordMap (NonEmpty min minV (Bin max maxV l r))))
    | w2i (xor min max) < 0 = [IntMap (WordMap (W.r2lMap (NonEmpty max maxV r))), IntMap (WordMap (NonEmpty min minV l))]
    | otherwise = [IntMap (WordMap (NonEmpty min minV l)), IntMap (WordMap (W.r2lMap (NonEmpty max maxV r)))]
splitRoot (IntMap (WordMap (NonEmpty min minV (Bin max maxV l r))))
    | w2i (xor min max) < 0 = [IntMap (WordMap (W.r2lMap (NonEmpty max maxV r))), IntMap (WordMap (NonEmpty min minV l))]
    | otherwise = [IntMap (WordMap (NonEmpty min minV l)), IntMap (WordMap (W.r2lMap (NonEmpty max maxV r)))]
splitRoot (IntMap (WordMap (NonEmpty min minV (Bin max maxV l r))))
    | w2i (xor min max) < 0 = [IntMap (WordMap (W.r2lMap (NonEmpty max maxV r))), IntMap (WordMap (NonEmpty min minV l))]
    | otherwise = [IntMap (WordMap (NonEmpty min minV l)), IntMap (WordMap (W.r2lMap (NonEmpty max maxV r)))]