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)