
On Wed, Aug 12, 2009 at 11:34 AM, David Menendez
On Wed, Aug 12, 2009 at 9:16 AM, John Van Enk
wrote: On Wed, Aug 12, 2009 at 2:09 AM, Ketil Malde
wrote: And perhaps also note that you will get exceptions for values outside the Enum range.
I'd think that part is obvious.
That depends on what "outside the Enum range" means. You'll get an exception if you somehow get an Int key in the map which doesn't correspond to any value in the enum...
We should be protected by the type system against unmatched Int's in the map as long as you have sane Enum instances.
... but you don't get an exception if you try to pass in, say, a large Integer. Prelude> fromEnum (2^32) 0
In essence, you're using Enum as a hash function, but not making any provision for hash collisions.
Unless I'm mistaken, the Enum typeclass _is_ a hash function who's keyspace is the range of Int that doesn't make any provisions for collisions.