Proposal: Make Data.Map.insertWith' and friends consistently force the value inserted

Bas van Dijk v.dijk.bas at gmail.com
Mon May 31 10:13:38 EDT 2010


+1

(Although a user can seq the value herself before calling insertWith'...)

Regards,

Bas

P.S.
I just noticed that Data.IntMap doesn't provide the strict insertWith'
and insertWithKey' like Data.Map does. That seems to be a bit
inconsistent.

On Mon, May 31, 2010 at 12:34 AM, Ian Lynagh <igloo at earth.li> wrote:
>
> 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
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>


More information about the Libraries mailing list