lib/utils.js
function MERGER(oldVal, newVal) {
		let onme = CNAME(oldVal), ocon = ISCONFIG(oldVal), otyp = ISPTYPE(oldVal),
			nnme = CNAME(newVal), ncon = ISCONFIG(newVal), ntyp = ISPTYPE(newVal);
		if (otyp || ntyp) { return newVal; };
		if (ocon && ncon && onme==nnme) {
			return new GETCONFIG(onme)(Assign(oldVal, newVal));
		};
		if (ocon && onme=='GNParam') {
			if (nnme=='array') return oldVal.AddVersion(newVal[0],     newVal[1]);
			if (nnme=='List' ) return oldVal.AddVersion(newVal.get(0), newVal.get(1).toJS());
		};
		return newVal;
	}
function MERGER(oldVal, newVal) {
		let onme = CNAME(oldVal), ocon = ISCONFIG(oldVal), otyp = ISPTYPE(oldVal),
			nnme = CNAME(newVal), ncon = ISCONFIG(newVal), ntyp = ISPTYPE(newVal);
		if (otyp || ntyp) { return newVal; };
		if (ocon && ncon && onme==nnme) {
			return new GETCONFIG(onme)(Assign(oldVal, newVal));
		};
		if (ocon && onme=='GNParam') {
			if (nnme=='array') return oldVal.AddVersion(newVal[0],     newVal[1]);
			if (nnme=='List' ) return oldVal.AddVersion(newVal.get(0), newVal.get(1).toJS());
		};
		return newVal;
	}
function MERGER ( oldVal , newVal ) { let onme = CNAME ( oldVal ) , ocon = ISCONFIG ( oldVal ) , otyp = ISPTYPE ( oldVal ) , nnme = CNAME ( newVal ) , ncon = ISCONFIG ( newVal ) , ntyp = ISPTYPE ( newVal ) ; if ( otyp || ntyp ) { return newVal ; } ; if ( ocon && ncon && onme == nnme ) { return new GETCONFIG ( onme ) ( Assign ( oldVal , newVal ) ) ; } ; if ( ocon && onme == 'GNParam' ) { if ( nnme == 'array' ) return oldVal . AddVersion ( newVal [ 0 ] , newVal [ 1 ] ) ; if ( nnme == 'List' ) return oldVal . AddVersion ( newVal . get ( 0 ) , newVal . get ( 1 ) . toJS ( ) ) ; } ; return newVal ; }
A `callback` used in `Immutable`.`mergeWith`

@param {*} oldVal The value of the original Object
@param {*} newVal The value of the merging Object
@returns {*}
A callback used in Immutable . mergeWith