I've been trying to implement EnumMap as a wrapper for IntMap. Here's
the first problem I ran into:

> IntMap.insertWithKey :: (Key -> a -> a -> a) -> Key -> a -> IntMap a -> 
> IntMap a

I'd like to translate this to something like:

> EnumMap.insertWithKey :: Enum k => (Key k -> a -> a -> a) -> Key k -> a -> 
> EnumMap k a -> EnumMap k a

My initial thought was just to make it a normal wrapper:

> EnumMap.insertWithKey f k v m = IntMap.insertWithKey f (unKey k) v (unEnumMap 
> m)

The obvious problem here is the type of `f' expected by the wrapper
function and the internal function. Either we force the wrapper to
take a function that takes an Int as the first parameter, or we
rewrite the logic of insertWithKey to allow us to use the proper (Key
k) type.

I don't see an obvious way around this--am I missing something?

On Sat, Aug 8, 2009 at 4:41 PM, Henning
Thielemann<[email protected]> wrote:
>
> On Sat, 8 Aug 2009, John Van Enk wrote:
>
>> Hi List,
>>
>> I've uploaded a first version of EnumMap to hackage.
>>
>> EnumMap is a generalization of IntMap that constrains the key to Enum
>> rather than forcing it to be Int. I have no idea what impact this has
>> on performance, but it still passes all the tests that ship with
>> IntMap. (My guess is that performance will be similar/identical unless
>> I've missed something.)
>
> Could that be implemented as wrapper around IntMap?
>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to