mergeWith
Mutates previous, so that it also encompasses the changes in this
.
Typically, this method will throw an exception if previous cannot be merged. It is vital that canMergeWith returned false
, so that mergeWith is not called, and therefore the exception is never thrown.