[GHC] #9742: The default definitions of foldl1 and foldr1 are too strict
GHC
ghc-devs at haskell.org
Wed Oct 29 17:51:32 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 Libraries | Version: 7.9
Keywords: | Operating System:
Architecture: Unknown/Multiple | Unknown/Multiple
Difficulty: Easy (less than 1 | Type of failure: Runtime
hour) | crash
Blocked By: | Test Case:
Related Tickets: | Blocking:
| Differential Revisions:
-------------------------------------+-------------------------------------
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
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9742>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list