--- /dev/null
+import "JavaBuiltin" as Java
+import "Set" as Set
+import "MMap" as MMap
+
+importJava "java.util.Map" where
+ data T a b
+
+ containsKey :: T a b -> a -> Boolean
+ containsValue :: T a b -> b -> Boolean
+ size :: T a b -> Integer
+ isEmpty :: T a b -> Boolean
+ entrySet :: T a b -> Set.T (MMap.Entry a b)
+ get :: T a b -> a -> Maybe b
+ @JavaName get
+ unsafeGet :: T a b -> a -> b
+
+ keySet :: T a b -> Set.T a
+
+@inline
+iter :: (a -> b -> <e> ()) -> T a b -> <e> ()
+iter f m = Set.iter (\entry -> f (MMap.keyOf entry) (MMap.valueOf entry)) (entrySet m)
+
+@inline
+iterB :: (a -> b -> <e> Boolean) -> T a b -> <e> Boolean
+iterB f m = Set.iterB (\entry -> f (MMap.keyOf entry) (MMap.valueOf entry)) (entrySet m)
+
+@inline
+fold :: (a -> b -> c -> <e> a) -> a -> T b c -> <e> a
+fold f init m = Set.fold (\cur entry -> f cur (MMap.keyOf entry) (MMap.valueOf entry)) init (entrySet m)
+
+@inline
+freeze :: MMap.T a b -> <Proc> T a b
+freeze = Java.unsafeCoerce
+
+/*
+@inline
+map :: (b -> <e> c) -> T a b -> <e> T a c
+map f m = do
+ result = MMap.createC (size m)
+ iter (\k v -> put result k (f v)) m
+ freeze result
+*/
\ No newline at end of file