#9240: "read . show ≡ id" not satisfied by Data.Fixed -------------------------------------+------------------------------------- Reporter: hvr | Owner: ekmett Type: bug | Status: patch Priority: normal | Milestone: 7.10.1 Component: Core | Version: 7.2.1 Libraries | Keywords: Resolution: | Architecture: Unknown/Multiple Operating System: | Difficulty: Unknown Unknown/Multiple | Blocked By: Type of failure: | Related Tickets: #9231 None/Unknown | Test Case: | Blocking: | Differential Revisions: Phab:D547 | -------------------------------------+------------------------------------- Comment (by Herbert Valerio Riedel <hvr@…>): In [changeset:"7c38e985aa211ca44039c6d1db9fa13690749c59/ghc"]: {{{ #!CommitTicketReference repository="ghc" revision="7c38e985aa211ca44039c6d1db9fa13690749c59" Make `read . show = id` for Data.Fixed (fix #9240) The QuickCheck property now succeeds: prop :: Fixed B7 -> Bool prop a = read (show a) == a This changes the Show instance for Fixed to round up, rather than down when calculating a digit. This needs to happen because Read also rounds down: data B7 instance HasResolution B7 where resolution _ = 128 1 / 128 = 0.0078125 read "0.007" = (0.000 :: Fixed B7) Here is an example of the change to Show: showFixed False (0.009 :: Fixed B7) -- Broken: "0.007" -- Fixed: "0.008" And now Read can continue to round down: read "0.008" = (0.0078125 :: Fixed B7) Reviewed By: hvr, ekmett Differential Revision: https://phabricator.haskell.org/D547 }}} -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9240#comment:4> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler