I'm not sure why you don't just use curry directly here. Also, why not just implement toAscList like in the rule and INLINE it?
I concede that using curry directly is the better approach, but when I implement toAscList as in the rule and inline it, it doesn't actually appear to get inlined.  (Example: mapKeysWith, which is defined as fromListWith c . List.map fFirst . toList, doesn't actually fold/build with the map.)

Revised, complete patch: http://hackage.haskell.org/trac/ghc/attachment/ticket/3999/fold-building.patch