 : increment-gap-start ( gb n -- )
     over gap-start>> + swap gap-start<< ;
 
-! generic dispatch identifies numbers as sequences before numbers...
-M: number insert* ( elem position gb -- ) [ 1array ] 2dip insert* ;
-! : number-insert ( num position gb -- ) [ 1array ] 2dip insert* ;
-
-M: sequence insert* ( seq position gb -- )
+M: number insert*
+    [ 1array ] 2dip insert* ;
+
+M: sequence insert*
     prepare-insert [ insert-elements ] 2keep swap length increment-gap-start ;
 
-: (delete*) ( gb -- )
-    dup gap-end>> 1 + over gap-end<< ?decrease ;
-
-GENERIC: delete* ( pos gb -- )
-
-M: gb delete* ( position gb -- )
-    tuck move-gap (delete*) ;
+: delete* ( pos gb -- )
+    tuck move-gap dup gap-end>> 1 + over gap-end<< ?decrease ;
 
 ! -------- stack/queue operations -----------
 


: push-end ( obj gb -- ) [ length ] keep insert* ;

: pop-elem ( position gb -- elem ) [ nth ] 2keep delete* ;

: pop-start ( gb -- elem ) 0 swap pop-elem ;


    dup gap-start>> head ;

: copy-after-gap ( array gb -- )
    ! copy everything after the gap in 'gb' into the end of
    ! 'array', and change 'gb's gap-end to reflect the gap-end
    ! in 'array'
    dup after-gap [ 2dup set-new-gap-end gap-end>> swap ] dip -rot copy ;

: copy-before-gap ( array gb -- )
    ! copy everything before the gap in 'gb' into the start of
    ! 'array'
    before-gap 0 rot copy ; ! gap start doesn't change

: resize-buffer ( gb new-size -- )
