Data.IntMap/IntSet inconsistencies

while we're on the topic, i'm curious as to why there isn't a zip / join-type method for IntMaps / IntSets. (i use the term join in reference to SQL.) i have defined some in the past like -- maybe not efficient joinOuterWithKey f m1 m2 d1 d2 = M.union (M.intersectionWithKey f m1 m2) $ M.union (M.mapWithKey f1 $ m1 M.\\ m2) (M.mapWithKey f2 $ m2 M.\\ m1) where f1 k l = f k l d2 f2 k r = f k d1 r -- left biased joinLeftWithKey f m1 m2 d2 = M.union (M.intersectionWithKey f m1 m2) (M.mapWithKey f1 $ m1 M.\\ m2) where f1 k a = f k a d2 -- right biased joinRightWithKey f m1 m2 d1 = M.union (M.intersectionWithKey f m1 m2) (M.mapWithKey f2 $ m2 M.\\ m1) where f2 k b = f k d1 b joinInnerWithKey = M.intersectionWithKey but 1) these are probably not terribly efficient, as they do multiple traversals 2) the types are not general enough : like zip you should be able to take functions f : a->b->c instead of what intersectionWith forces you to do (f: a->b->a). the proper implementation should be easy, and trivially generalizes intersectionWith and friends, i believe. or am i missing something? best, ben
participants (1)
-
Ben