
#9792: map/coerce rule never seems to fire -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: ekmett Type: bug | Status: new Priority: normal | Milestone: 7.10.1 Component: Core | Version: 7.9 Libraries | Keywords: Resolution: | Architecture: Unknown/Multiple Operating System: | Difficulty: Unknown Unknown/Multiple | Blocked By: Type of failure: Runtime | Related Tickets: performance bug | Test Case: | Blocking: | Differential Revisions: | -------------------------------------+------------------------------------- Comment (by nomeata): We have a test case for this, T2110. I wonder why you observe something different. My guess: Your code is polymorphic in the member of the list, and hence the code looks different and is no longer matched. Now if GHC would float out the `case $dCoercible_arz of`, it would probably work. But of course it cannot, or we’d be stricter in the `Coercible` constraint than intended. Ah: And in the polymorphic case, `map coerce = coerce` does not even hold! If the `Coercible` evidence is ⊥, then `map coerce [] = []`, but `coerce [] = ⊥`. Given that high performance code is rarely polymorphic, I think we are fine. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9792#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler