
On Tue, Jan 27, 2009 at 09:41:30PM -0500, wren ng thornton wrote:
John Goerzen wrote:
Hi folks,
I have uploaded a new package to Haskell: convertible. At its heart, it's a very simple typeclass that's designed to enable a reasonable default conversion between two different types without having to remember a bunch of functions.
I once again point out that realToFrac is *wrong* for converting from Float or Double.
> realToFrac (1/0::Float) ::Double 3.402823669209385e38
Yes, I understand what you are saying and agree with you. But there is nothing better in the standard library, and I did not feel it was worth adding another dependency to the package simply for the sake of this sort of thing. People that need it can get it for themselves and write their own instance of Convertible if they wish. I also note that fromIntegral does no bounds checking and produces garbage in a number of cases. This, though, is detected in convertible due to bounds checking there.
These exceptional values are not uncommon and should be dealt with correctly. The code to do this is already written in logfloat:Data.Number.Transfinite[1], simply use the realToFrac method of the RealToFrac class instead of the Prelude's version which is broken.
I wonder if you would consider submitting a patch to base? It seems that this is a sore problem there, and ideally should be dealt with properly in base. -- John