@@ -30,6 +30,7 @@ import Prelude
3030import Data.Foldable (foldl , foldMap , foldr , Foldable )
3131import Data.List (List (..), length , nub )
3232import Data.Maybe (Maybe (..), maybe , isJust )
33+ import Data.Maybe.Unsafe (unsafeThrow )
3334import Data.Monoid (Monoid )
3435import Data.Traversable (traverse , Traversable )
3536import Data.Tuple (Tuple (..), uncurry )
@@ -210,18 +211,23 @@ delete = down Nil
210211 up (Cons (ThreeMiddle (Three a k1 v1 b k2 v2 c) k3 v3 k4 v4 e) ctx) d = fromZipper ctx (Three (Two a k1 v1 b) k2 v2 (Two c k3 v3 d) k4 v4 e)
211212 up (Cons (ThreeMiddle a k1 v1 k2 v2 (Three c k3 v3 d k4 v4 e)) ctx) b = fromZipper ctx (Three a k1 v1 (Two b k2 v2 c) k3 v3 (Two d k4 v4 e))
212213 up (Cons (ThreeRight a k1 v1 (Three b k2 v2 c k3 v3 d) k4 v4) ctx) e = fromZipper ctx (Three a k1 v1 (Two b k2 v2 c) k3 v3 (Two d k4 v4 e))
214+ up _ _ = unsafeThrow " Impossible case in 'up'"
213215
214216 maxNode :: forall k v . (Ord k ) => Map k v -> { key :: k , value :: v }
215217 maxNode (Two _ k v Leaf ) = { key: k, value: v }
216218 maxNode (Two _ _ _ right) = maxNode right
217219 maxNode (Three _ _ _ _ k v Leaf ) = { key: k, value: v }
218220 maxNode (Three _ _ _ _ _ _ right) = maxNode right
221+ maxNode Leaf = unsafeThrow " Impossible case in 'maxNode'"
222+
219223
220224 removeMaxNode :: forall k v . (Ord k ) => List (TreeContext k v ) -> Map k v -> Map k v
221225 removeMaxNode ctx (Two Leaf _ _ Leaf ) = up ctx Leaf
222226 removeMaxNode ctx (Two left k v right) = removeMaxNode (Cons (TwoRight left k v) ctx) right
223227 removeMaxNode ctx (Three Leaf k1 v1 Leaf _ _ Leaf ) = up (Cons (TwoRight Leaf k1 v1) ctx) Leaf
224228 removeMaxNode ctx (Three left k1 v1 mid k2 v2 right) = removeMaxNode (Cons (ThreeRight left k1 v1 mid k2 v2) ctx) right
229+ removeMaxNode _ Leaf = unsafeThrow " Impossible case in 'removeMaxNode'"
230+
225231
226232-- | Insert the value, delete a value, or update a value for a key in a map
227233alter :: forall k v . (Ord k ) => (Maybe v -> Maybe v ) -> k -> Map k v -> Map k v
0 commit comments