var Immutable = require('immutable');

var is = Immutable.is.bind(Immutable),
    getKeys = Object.keys.bind(Object);

function shallowEqualImmutable(objA, objB) {
  if (is(objA, objB)) {
    return true;
  }
  var keysA = getKeys(objA),
      keysB = getKeys(objB),
      keysAlength = keysA.length,
      keysBlength = keysB.length
      
  if(keysAlength !== keysBlength) {
    return false;
  }
  
  // Test for A's keys different from B.
  for(var i = 0; i < keysAlength; i++) {
    if (!objB.hasOwnProperty(keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]]) ) {
      return false;
    }
  }
  
  // Now we dont need to test for B's keys missing from A,
  // because if length's is same and prev check success - objB hasn't more keys
  return true;
}

module.exports = shallowEqualImmutable;

@@ -73,48 +73,8 @@
 ble)
-,%0A    getKeys = Object.keys.bind(Object)
 ;%0A%0Af
@@ -123,16 +123,33 @@
 %7B%0A  if (
+objA === objB %7C%7C 
 is(objA,
@@ -183,150 +183,215 @@
   %7D%0A
+%0A
   
-var keysA = getKeys(objA),%0A      keysB = getKeys(objB),
+if (typeof objA !== 'object' %7C%7C objA === null %7C%7C%0A      typeof objB !== 'object' %7C%7C objB === null) %7B%0A    return false;
 %0A  
+%7D%0A
   
+%0A
   
+var 
 keysA
-length = keysA.length,%0A      keysBlength = keysB.length%0A      
+ = Object.keys(objA);%0A  var keysB = Object.keys(objB);%0A
 %0A  if
+ 
 (keysA
+.
 leng
@@ -402,16 +402,17 @@
 == keysB
+.
 length) 
@@ -431,26 +431,24 @@
  false;%0A  %7D%0A
-  
 %0A  // Test f
@@ -481,13 +481,82 @@
  B.%0A
+  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);%0A
   for
+ 
 (var
@@ -572,16 +572,17 @@
  %3C keysA
+.
 length; 
@@ -601,14 +601,10 @@
 f (!
-objB.h
+bH
 asOw
@@ -661,17 +661,16 @@
 ysA%5Bi%5D%5D)
- 
 ) %7B%0A    
@@ -699,149 +699,8 @@
   %7D%0A
-  %0A  // Now we dont need to test for B's keys missing from A,%0A  // because if length's is same and prev check success - objB hasn't more keys
 %0A  r

Make more similar to original version