Speed up IntMap
authorDavid Feuer <David.Feuer@gmail.com>
Sun, 8 May 2016 00:54:24 +0000 (20:54 -0400)
committerDavid Feuer <David.Feuer@gmail.com>
Sun, 8 May 2016 19:29:06 +0000 (15:29 -0400)
commit51e7b00716a7ae090094d59afa4a58dfac4b26ef
tree3f5f0f26181aab8519815316196a49cf8150f7a1
parentcefe44a536cd0c7fa300bd78e37ee1b518aa252f
Speed up IntMap

`delete`, `alter`, `update`, etc., used a `bin` smart
constructor to avoid installing any non-root `Nil`s. Now only
the ones that could have become `Nil` are checked, which is
a good bit cheaper since they're in cache. `adjustWithKey`
was implemented using `updateWithKey`, but in fact it never
needs to worry about `Nil`s, so implementing it directly
eliminates all such checks.

Make `updateLookupWithKey` in `Data.IntMap.Lazy` strict in its
recursive call to avoid essentially useless lazy pair allocation.
Data/IntMap/Base.hs
Data/IntMap/Strict.hs