
#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): Still not a full evaluation, but some more factoids: With {{{ myLast2 = foldl (\_ x -> x) undefined }}} I get {{{ myLast2 :: forall a. [a] -> a myLast2 = \ (@ a) -> foldl (myLast1) (undefined) }}} while when used (in the same model, non-fusing), this gets turned into the nice {{{ Rec { main_go :: [Int] -> Int -> Int main_go = \ (ds :: [Int]) (eta :: Int) -> case ds of _ { [] -> eta; : y ys -> main_go ys y } end Rec } }}} Writing {{{ myLast2 = inline foldl (\_ x -> x) undefined }}} also gives {{{ Rec { myLast1 :: forall a. [a] -> a -> a myLast1 = \ (@ a) (ds :: [a]) (eta :: a) -> case ds of _ { [] -> eta; : y ys -> myLast1 ys y } end Rec } myLast2 :: forall a. [a] -> a myLast2 = \ (@ a) (xs :: [a]) -> myLast1 xs (undefined) }}} So it looks good even when not fused. (Measurements are yet pending.) for the exported module, but when used, it produce -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9339#comment:5 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler