[GHC] #13353: foldr/nil rule not applied consistently
GHC
ghc-devs at haskell.org
Tue Feb 28 19:51:54 UTC 2017
#13353: foldr/nil rule not applied consistently
-------------------------------------+-------------------------------------
Reporter: nomeata | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.1
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: Compile-time
Unknown/Multiple | performance bug
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
I just had a project where it made a difference whether I add
{{{
{-# RULES "foldr/nil" forall k n . GHC.Base.foldr k n [] = n #-}
}}}
to my file or not, despite this rule already being present in the library.
I tried to minimize the problem and came up with this:
{{{#!hs
foo1 (f, fs) (x, xs) = (f x, map ($x) fs ++ map f xs)
foo2 f fs x xs = (f x, map ($x) fs ++ map f xs)
test1 x xs = foo1 (id, []) (x, xs)
test2 x xs = foo2 id [] x xs
test3 x xs = (id x, map ($x) [] ++ map id xs)
}}}
`test2` and `test3` nicely optimize the `map … [] ++` away, but `test`
does not.
(In this minimized example, adding the rule again locally does *not* help,
but there is still something fishy.)
Also, in all cases, `map id` remains, which should not be the case.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13353>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list