IN: linked-assocs USING: accessors assocs arrays kernel deques dlists sequences ; TUPLE: linked-assoc assoc dlist ; : ( -- assoc ) 0 linked-assoc boa ; M: linked-assoc assoc-size assoc>> assoc-size ; M: linked-assoc at* assoc>> at* dup [ obj>> ] when ; M: linked-assoc set-at [ [ swap 2array ] dip dlist>> push-back* ] 2keep assoc>> set-at ; M: linked-assoc delete-at [ [ assoc>> ] [ dlist>> ] bi [ at ] dip '[ _ delete-node ] when* ] [ assoc>> delete-at ] 2bi ; : dlist>seq ( dlist -- seq ) [ ] pusher [ dlist-each ] dip ; M: linked-assoc >alist dlist>> dlist>seq ; INSTANCE: linked-assoc assoc