
#9792: map/coerce rule never seems to fire -------------------------------------+------------------------------------- Reporter: dfeuer | Owner: ekmett Type: bug | Status: new Priority: normal | Milestone: 7.10.1 Component: Core Libraries | Version: 7.9 Keywords: | Operating System: Architecture: Unknown/Multiple | Unknown/Multiple Difficulty: Unknown | Type of failure: Runtime Blocked By: | performance bug Related Tickets: | Test Case: | Blocking: | Differential Revisions: -------------------------------------+------------------------------------- If I write a nice, simple use, like: {{{#!hs myPotato = map coerce }}} or even {{{#!hs myPotato = Data.OldList.map coerce }}} the "`map/coerce`" rule does not fire. It looks like there are two things getting in the way: 1. The `map` rule fires first, turning `map` into a `build/foldr` form, which `map/coerce` does not recognize. 2. Even if `map` gets written back, `coerce` has been expanded into something the rule doesn't recognize. So we end up with something that looks like {{{#!hs myPotato = \ (@ a_are) (@ b_arf) ($dCoercible_arz :: Coercible a_are b_arf) (lst_aqx :: [a_are]) -> map @ a_are @ b_arf (\ (tpl_B2 [OS=ProbOneShot] :: a_are) -> case $dCoercible_arz of _ [Occ=Dead] { GHC.Types.MkCoercible tpl1_B3 -> tpl_B2 `cast` (tpl1_B3 :: a_are ~R# b_arf) }) lst_aqx }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9792 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler