[GHC] #9742: The default definitions of foldl1 and foldr1 are too strict
GHC
ghc-devs at haskell.org
Wed Oct 29 21:24:41 UTC 2014
#9742: The default definitions of foldl1 and foldr1 are too strict
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner: ekmett
Type: bug | Status: new
Priority: normal | Milestone: 7.10.1
Component: Core | Version: 7.9
Libraries | Keywords:
Resolution: | Architecture: Unknown/Multiple
Operating System: | Difficulty: Easy (less than 1
Unknown/Multiple | hour)
Type of failure: Runtime | Blocked By:
crash | Related Tickets:
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Description changed by dfeuer:
Old description:
> We currently have
>
> {{{#!hs
> 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)
> }}}
>
> This has to traverse the entire list before it can do anything. What we
> want is
>
> {{{#!hs
> mf x r = Just $ case r of
> Nothing -> x
> Just y -> f x y
> }}}
New description:
We currently have
{{{#!hs
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)
}}}
This has to traverse the entire container before it can do anything. What
we want is
{{{#!hs
mf x r = Just $ case r of
Nothing -> x
Just y -> f x y
}}}
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9742#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list