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