@@ -152,23 +152,24 @@ delete = down []
152
152
where
153
153
down :: forall k v . (P.Ord k ) => [TreeContext k v ] -> k -> Map k v -> Map k v
154
154
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
172
173
173
174
up :: forall k v . (P.Ord k ) => [TreeContext k v ] -> Map k v -> Map k v
174
175
up [] tree = tree
0 commit comments