Use recur.
Return nil if there are no squash able pairs.
Squash only the first squashable pair in the row
Shift the next value into the last cell if it's empty
Make sure the next value can't be used to squash
Check that only the first squashable pair is squashed
Added shiftable-row?
A row is shiftable if it's different after shifting
Renamed to squashable-pair?
Renamed to squash-pair
Renamed to shift-row
Added shiftable-board?