Allow me to answer my own question: > EnumMap.insertWithKey f k v m = IntMap.insertWithKey (f . Key . toEnum) > (unKey k) v (unEnumMap m)
On Mon, Aug 10, 2009 at 2:32 PM, John Van Enk<[email protected]> wrote: > 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
