
#9339: last is not a good consumer -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: | Version: 7.8.3 libraries/base | Keywords: Resolution: | Operating System: Unknown/Multiple Differential Revisions: | Type of failure: Runtime Architecture: | performance bug Unknown/Multiple | Test Case: Difficulty: Unknown | Blocking: Blocked By: | Related Tickets: | -------------------------------------+------------------------------------- Comment (by nomeata): What general fusion work are you referring to? I only know about the improvements for fusing foldl, which doesn’t seem to apply here. Although maybe it could. How about this definition: {{{ myLast2 :: [a] -> a myLast2 = foldl (\_ x -> x) undefined }}} While `last` yields 800051648 bytes, and `myLast` yields 560084432 bytes, this runs in 51648 bytes (i.e. it fuses completely). Admitted, the resulting code looks almost stupidly efficient (at least if I write `10^7` as `10000` – I’m unjustifiably surprised that that is not constant-folded): {{{ Rec { $wgo $wgo = \ w_s3Aj -> case w_s3Aj of wild_Xf { __DEFAULT -> $wgo (+# wild_Xf 1); 10000000 -> 10000000 } end Rec } }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9339#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler