@@ -152,23 +152,24 @@ delete = down []
152152 where
153153 down :: forall k v . (P.Ord k ) => [TreeContext k v ] -> k -> Map k v -> Map k v
154154 down ctx _ Leaf = fromZipper ctx Leaf
155- down ctx k (Two Leaf k1 _ Leaf ) | k P .== k1 = up ctx Leaf
156- down ctx k (Two left k1 _ right) | k P .== k1 =
157- let max = maxNode left
158- in removeMaxNode (TwoLeft max.key max.value right P .: ctx) left
159- down ctx k (Two left k1 v1 right) | k P .< k1 = down (TwoLeft k1 v1 right P .: ctx) k left
160- down ctx k (Two left k1 v1 right) = down (TwoRight left k1 v1 P .: ctx) k right
161- down ctx k (Three Leaf k1 _ Leaf k2 v2 Leaf ) | k P .== k1 = fromZipper ctx (Two Leaf k2 v2 Leaf )
162- down ctx k (Three Leaf k1 v1 Leaf k2 _ Leaf ) | k P .== k2 = fromZipper ctx (Two Leaf k1 v1 Leaf )
163- down ctx k (Three left k1 _ mid k2 v2 right) | k P .== k1 =
164- let max = maxNode left
165- in removeMaxNode (ThreeLeft max.key max.value mid k2 v2 right P .: ctx) left
166- down ctx k (Three left k1 v1 mid k2 _ right) | k P .== k2 =
167- let max = maxNode mid
168- in removeMaxNode (ThreeMiddle left k1 v1 max.key max.value right P .: ctx) mid
169- down ctx k (Three left k1 v1 mid k2 v2 right) | k P .< k1 = down (ThreeLeft k1 v1 mid k2 v2 right P .: ctx) k left
170- down ctx k (Three left k1 v1 mid k2 v2 right) | k1 P .< k P .&& k P .< k2 = down (ThreeMiddle left k1 v1 k2 v2 right P .: ctx) k mid
171- down ctx k (Three left k1 v1 mid k2 v2 right) = down (ThreeRight left k1 v1 mid k2 v2 P .: ctx) k right
155+ down ctx k (Two Leaf k1 _ Leaf )
156+ | k P .== k1 = up ctx Leaf
157+ down ctx k (Two left k1 v1 right)
158+ | k P .== k1 = let max = maxNode left
159+ in removeMaxNode (TwoLeft max.key max.value right P .: ctx) left
160+ | k P .< k1 = down (TwoLeft k1 v1 right P .: ctx) k left
161+ | P .otherwise = down (TwoRight left k1 v1 P .: ctx) k right
162+ down ctx k (Three Leaf k1 v1 Leaf k2 v2 Leaf )
163+ | k P .== k1 = fromZipper ctx (Two Leaf k2 v2 Leaf )
164+ | k P .== k2 = fromZipper ctx (Two Leaf k1 v1 Leaf )
165+ down ctx k (Three left k1 v1 mid k2 v2 right)
166+ | k P .== k1 = let max = maxNode left
167+ in removeMaxNode (ThreeLeft max.key max.value mid k2 v2 right P .: ctx) left
168+ | k P .== k2 = let max = maxNode mid
169+ in removeMaxNode (ThreeMiddle left k1 v1 max.key max.value right P .: ctx) mid
170+ | k P .< k1 = down (ThreeLeft k1 v1 mid k2 v2 right P .: ctx) k left
171+ | k1 P .< k P .&& k P .< k2 = down (ThreeMiddle left k1 v1 k2 v2 right P .: ctx) k mid
172+ | P .otherwise = down (ThreeRight left k1 v1 mid k2 v2 P .: ctx) k right
172173
173174 up :: forall k v . (P.Ord k ) => [TreeContext k v ] -> Map k v -> Map k v
174175 up [] tree = tree
0 commit comments