:: compress-path ( source assoc -- destination ) [let | destination [ source assoc at ] | source destination = [ source ] [ [let | destination' [ destination assoc compress-path ] | destination' destination = [ destination' source assoc set-at ] unless destination' ] ] if ] ; : (compress-path') ( source-cursor -- destination-cursor ) dup [ value>> ] [ key>> ] bi = [ dup value>> >>key (compress-path') dup [ value>> ] [ key>> ] bi = [ dup value>> >>value ] unless ] unless : compress-path' ( source assoc -- destination ) >cursor swap >>key (compress-path') value>>