   getIn: (obj, path) -> obj.getIn path
   setIn: (obj, path, val) -> obj.setIn path, val
   merge: (obj1, obj2) -> obj1.merge obj2
+  mergeDeep: (obj1, obj2) -> obj1.mergeDeep obj2
   initArr: -> Immutable.List INITIAL_ARRAY   # shallow
   getAt: (arr, idx) -> arr.get idx
   setAt: (arr, idx, val) -> arr.set idx, val

  obj2 = merge obj, {c: 5, f: null}
  _addResult results, (obj2 isnt obj)
  _addResult results, (get(obj2, 'd') is get(obj, 'd'))
  _addResult results, (get(obj2, 'c') is 5)
  _addResult results, (get(obj2, 'f') is null)
  results.push '-'

  getIn: _getIn
  setIn: (obj, path, val) -> obj.setIn path, val
  merge: (obj1, obj2) -> obj1.merge obj2
  mergeDeep: (obj1, obj2) -> obj1.merge obj2, {deep: true}
  initArr: -> Seamless INITIAL_ARRAY
  getAt: (arr, idx) -> arr[idx]
  setAt: (arr, idx, val) -> arr.set idx, val
