Gene A <[email protected]> writes: > 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 [email protected] IvanMiljenovic.wordpress.com _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
