ref: 434694cbdc08d382afff2dd71bfbe4f52f6a7a31
parent: 314c507e06df7629472e566720c3aed9b2837016
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Mon Sep 18 18:19:05 EDT 2023
Reuse code for insert
--- a/lib/Data/IntMap.hs
+++ b/lib/Data/IntMap.hs
@@ -40,26 +40,8 @@
else if m == 2 then lookup d m2
else lookup d m3
--- Reusing insertWith would save code.
insert :: forall a . Int -> a -> IntMap a -> IntMap a
-insert ak a =
- let
- ins k am =
- case am of
- Empty -> Leaf k a
- Leaf i b ->
- if k == i then
- Leaf k a
- else
- ins k $ insert i b $ Node Empty Empty Empty Empty
- Node m0 m1 m2 m3 ->
- let
- (d, m) = divModX k 4
- in if m == 0 then Node (ins d m0) m1 m2 m3
- else if m == 1 then Node m0 (ins d m1) m2 m3
- else if m == 2 then Node m0 m1 (ins d m2) m3
- else Node m0 m1 m2 (ins d m3)
- in ins ak
+insert = insertWith const
fromList :: forall a . [(Int, a)] -> IntMap a
fromList = foldr (uncurry insert) empty
--
⑨