signum x | isNegativeZero x = x
| x == 0 = 0
| x > 0.0 = 1
| otherwise = negate 1
abs x | isNegativeZero x = 0
| x >= 0 = x
| otherwise = negate x
A similar change would need to be done for the "Num Double" instance as well. Of course, implementations can take advantage of the underlying CPU's native floating-point abs/sign functions if available as well, avoiding explicit tests at the Haskell code; based on the underlying platform.
Library guidelines suggest a discussion period of 2 weeks on this issue. I'm hoping that we can resolve the issue in a timely manner, and at least GHC's implementation can match the desired semantics in the next release. If there's consensus at the end of 2-weeks; I'll go ahead and create a corresponding ticket for GHC.
Thanks,
-Levent.