[add MapLike class, separate SetLike out. rearrange MPTC parameters for newtype deriving.
John Meacham <john@repetae.net>**20060409053123] hunk ./Util/SetLike.hs 7
+    minsert,
+    msingleton,
hunk ./Util/SetLike.hs 10
+    ModifySet(..),
+    MapLike(..),
hunk ./Util/SetLike.hs 13
-    )
-    where
+    ) where
hunk ./Util/SetLike.hs 43
-class SetLike s => BuildSet s t where
+class SetLike s => BuildSet t s | s -> t where
hunk ./Util/SetLike.hs 46
-    member :: t -> s -> Bool
hunk ./Util/SetLike.hs 47
-    delete :: t -> s -> s
hunk ./Util/SetLike.hs 52
+class BuildSet t s => ModifySet t s | s -> t where
+    delete :: t -> s -> s
+    member :: t -> s -> Bool
hunk ./Util/SetLike.hs 72
-instance BuildSet IS.IntSet Int where
+instance BuildSet Int IS.IntSet where
hunk ./Util/SetLike.hs 75
-    member x s = IS.member x s
hunk ./Util/SetLike.hs 76
-    delete x s = IS.delete x s
hunk ./Util/SetLike.hs 78
+instance ModifySet Int IS.IntSet where
+    delete x s = IS.delete x s
+    member x s = IS.member x s
hunk ./Util/SetLike.hs 90
-instance Ord a => BuildSet (S.Set a) a where
+instance Ord a => BuildSet a (S.Set a) where
hunk ./Util/SetLike.hs 93
-    member x s = S.member x s
hunk ./Util/SetLike.hs 94
-    delete x s = S.delete x s
hunk ./Util/SetLike.hs 96
+instance Ord a => ModifySet a (S.Set a) where
+    member x s = S.member x s
+    delete x s = S.delete x s
+
hunk ./Util/SetLike.hs 105
-    --isSubsetOf = IM.isSubsetOf
hunk ./Util/SetLike.hs 107
+
+instance Ord a => BuildSet (Int,a) (IM.IntMap a) where
+    fromList xs = IM.fromList xs
+    fromDistinctAscList xs = IM.fromDistinctAscList xs
+    insert (k,v) s = IM.insert k v s
+    singleton (k,v) = IM.singleton k v
+
+
hunk ./Util/SetLike.hs 118
-    --isSubsetOf = M.isSubsetOf
hunk ./Util/SetLike.hs 120
+instance Ord a => BuildSet (a,b) (M.Map a b) where
+    fromList xs = M.fromList xs
+    fromDistinctAscList xs = M.fromDistinctAscList xs
+    insert (k,v) s = M.insert k v s
+    singleton (k,v) = M.singleton k v
+
+minsert :: BuildSet (k,v) s => k -> v -> s -> s
+minsert k v s = insert (k,v) s
+
+msingleton :: BuildSet (k,v) s => k -> v -> s
+msingleton k v = singleton (k,v)
+
+
+class SetLike m => MapLike k v m | m -> k v where
+    mdelete :: k -> m -> m
+    mmember :: k -> m -> Bool
+    mlookup :: Monad g => k -> m -> g v
+
+instance Ord a => MapLike Int a (IM.IntMap a) where
+    mdelete = IM.delete
+    mmember = IM.member
+    mlookup k m = case IM.lookup k m of
+        Nothing -> fail $ "IntMap: can't find " ++ show k
+        Just x -> return x
+
+instance Ord k => MapLike k v (M.Map k v) where
+    mdelete = M.delete
+    mmember = M.member
+    mlookup = M.lookup
+
+
hunk ./Util/SetLike.hs 156
-instance Enum a => BuildSet (EnumSet a) a where
+instance Enum a => BuildSet a (EnumSet a) where
hunk ./Util/SetLike.hs 159
-    member x (EnumSet s) = IS.member (fromEnum x) s
hunk ./Util/SetLike.hs 160
-    delete x (EnumSet s) = EnumSet $ IS.delete (fromEnum x) s
hunk ./Util/SetLike.hs 162
+instance Enum a => ModifySet a (EnumSet a) where
+    member x (EnumSet s) = IS.member (fromEnum x) s
+    delete x (EnumSet s) = EnumSet $ IS.delete (fromEnum x) s
+