 
 : midpoint@ ( seq -- n ) length 2/ ; inline
 
-: halves ( seq -- first second )
+: halves ( seq -- first-slice second-slice )
     dup midpoint@ cut-slice ;
 
 : binary-reduce ( seq start quot: ( elt1 elt2 -- newelt ) -- value )

: unclip-last ( seq -- butlast last )
    [ but-last ] [ peek ] bi ;

: unclip-slice ( seq -- rest first )
    [ rest-slice ] [ first ] bi ; inline

: 2unclip-slice ( seq1 seq2 -- seq1' seq2' elt1 elt2 )
    [ unclip-slice ] bi@ swapd ; inline

: map-reduce ( seq map-quot reduce-quot -- result )


: push-all ( src dest -- ) [ length ] [ copy ] bi ;

<PRIVATE

: ((append)) ( seq1 seq2 accum -- accum )
    [ >r over length r> copy ]
    [ 0 swap copy ] 
