Hi all, Currently, Data.Map.insertWith' (and friends) only force the value inserted when the combining function creates it: Prelude Data.Map> insertWith' (+) "foo" undefined empty `seq` () () Prelude Data.Map> insertWith' (+) "foo" undefined (singleton "foo" 1) `seq` () *** Exception: Prelude.undefined I think it would be more consistent for it to always force it: Prelude Data.Map> insertWith' (+) "foo" undefined empty `seq` () *** Exception: Prelude.undefined Prelude Data.Map> insertWith' (+) "foo" undefined (singleton "foo" 1) `seq` () *** Exception: Prelude.undefined Patch: hunk ./Data/Map.hs 460 insertWithKey' :: Ord k => (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a insertWithKey' f kx x t = case t of - Tip -> singleton kx x + Tip -> singleton kx $! x Bin sy ky y l r -> case compare kx ky of LT -> balance ky y (insertWithKey' f kx x l) r Ticket: http://hackage.haskell.org/trac/ghc/ticket/4109 Suggested discussion deadline: 14 June 2010. Thanks Ian