Proposal: Make default impls for foldl1 and foldr1 lazier

Andreas Abel abela at chalmers.se
Thu Oct 30 15:55:52 UTC 2014


+1.  Or, for the friends of point-free programming,

foldr f = fromMaybe (error "foldr1: empty structure") .
   foldr (\ x -> Just . maybe x (f x)) Nothing

On 29.10.2014 20:08, David Feuer wrote:
> We currently have (in Data.Foldable)
>
>      foldr1 :: (a -> a -> a) -> t a -> a
>      foldr1 f xs = fromMaybe (error "foldr1: empty structure")
>                      (foldr mf Nothing xs)
>        where
>          mf x Nothing = Just x
>          mf x (Just y) = Just (f x y)
>
> and something similar for foldl1. This is strict in the entire spine,
> unlike the list version, because it has to get all the way to the end of
> the list before it starts laying down Justs. I propose we change this to
> the obvious:
>
>      foldr1 :: (a -> a -> a) -> t a -> a
>      foldr1 f xs = fromMaybe (error "foldr1: empty structure")
>                      (foldr mf Nothing xs)
>        where
>          mf x r = Just $ case r of
>                            Nothing -> x
>                            Just y  -> f x y
>
> Since GHC 7.10.1 is fast approaching, I doubt we have the usual two
> weeks to discuss this, so please speak up as soon as you can if you have
> concerns.
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>


-- 
Andreas Abel  <><      Du bist der geliebte Mensch.

Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden

andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/


More information about the Libraries mailing list