
Gene A
The problem I see is that in both: Version: September 2006 of hugs, which is the one that is current for Ubuntu 9.10 release, and ghci 6.10.4, they both exhibit a {I think} strange behaviour, in regards to the shorthand way of calling out a list of enumerable values. I will explain the problem that I have run into with examples:
Hugs> [3,7..22] [3,7,11,15,19] <- OK
Hugs> map (* 1.0) [3,7,11,15,19] <- manual spec OK [3.0,7.0,11.0,15.0,19.0]
Hugs> map (* 1.0) [3,7..22] <- same spec as first but !!! when mapped to with a (*1.0) to coerce them to reals: [3.0,7.0,11.0,15.0,19.0,23.0] <- went one outside of range spec.
[snip]
This seems like a possible bug? or at least a sure fire trap waiting to be sprung ... one of those nasties that could really create havoc if someone is not aware of this behaviour and buries a function that include something that unwittingly coerces from an Integral to a Realfrac or Fractional. Is this a well known thing to watch out for.. or is it something that can be worked around, other then having to enumerate every value in a list rather then use the handiness of the range notation as shorthand?
This is because the Enum instance for floating point numbers is screwy and shouldn't be used in general (floating point rounding, etc.; don't forget, they're defined in binary and not all fractional values can be defined exactly in a finite binary value). A better way: map fromIntegral [3,7..22] -- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com IvanMiljenovic.wordpress.com