
Stijn De Saeger wrote:
I'm new to this list, as well as to haskell, so this question probably has "newbie" written all over it. I'm thinking of a way to represent a set of reals, say the reals between 0.0 and 1.0. Right now I am just using a pair of Float to represent the lower and upper bounds of the set, but i have this dark throbbing feeling that there should be a more haskellish way to do this, using laziness. List comprehensions are out it seems, because they increment with integer steps... (obviously). In other words, 0.5 `inSet` (Set [0.0..1.0]) returns False.
That form ([0.0..1.0]) is syntactic sugar for enumFromTo. There's also
enumFromThenTo, for which you can use the syntax:
[0.0,0.1..1.0]
However, you can't specify infinitesimally small steps, nor increment
according to the resolution of the floating point type (at least, not
using the enumeration syntax; you *could* do it manually using integer
enumerations and encodeFloat, but that wouldn't be particularly
practical).
The only practical way to deal with large sets of reals is to use your
own representation and write your own operators on it (or hope that
someone else has written such a library). Generating massive lists (or
other structures) then testing for membership won't result in the
lists being optimised away.
--
Glynn Clements