[Haskell-cafe] Announce: EnumMap-0.0.1

David Menendez dave at zednenem.com
Wed Aug 12 12:58:40 EDT 2009


On Wed, Aug 12, 2009 at 12:07 PM, John Van Enk<vanenkj at gmail.com> wrote:
> On Wed, Aug 12, 2009 at 11:34 AM, David Menendez<dave at zednenem.com> wrote:
>> On Wed, Aug 12, 2009 at 9:16 AM, John Van Enk<vanenkj at gmail.com> wrote:
>>> On Wed, Aug 12, 2009 at 2:09 AM, Ketil Malde<ketil at malde.org> 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.

One would hope so.

>> ... 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.

Hash functions traditionally map integers to integers, so I would
describe fromEnum as "like" a hash function, but that's not important.

And yes, hash functions collide, which is why hash tables employ
various methods for distinguishing keys that hash to the same values.
EnumMap silently passes this responsibility to the user, without even
a note in the documentation.

-- 
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>


More information about the Haskell-Cafe mailing list