[GHC] #9434: GHC.List.reverse does not fuse
GHC
ghc-devs at haskell.org
Sat Aug 30 22:48:49 UTC 2014
#9434: GHC.List.reverse does not fuse
-------------------------------------+-------------------------------------
Reporter: dfeuer | Owner:
Type: bug | Status: patch
Priority: normal | Milestone:
Component: | Version: 7.9
libraries/base | Keywords:
Resolution: | Architecture: Unknown/Multiple
Operating System: | Difficulty: Easy (less than 1
Unknown/Multiple | hour)
Type of failure: Runtime | Blocked By:
performance bug | Related Tickets:
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
Comment (by dfeuer):
I've improved the rules for writing `reverse` back to a recursive form. It
appears to be good to fuse in most cases. The main exceptions seem to be
`filter p . reverse` (although `reverse . filter p` is good) and
`takeWhile . reverse` (although `reverse . takeWhile` is good). The latter
was investigated by Dan Doel. The problem seems to be that the closures
built up in the bad cases end up allocating more than the conses they
replace. Even the worst case for `nofib` (a `filter . reverse` form) isn't
really too terrible. I think we're probably better off making this change
than not.
Note: rules to try to convert `filter p . reverse` back to a (slightly)
better version seem inherently too fragile to want to bother with.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9434#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list