: sum-push ( elt vector -- ) [ pop + ] keep push ; : my-push ( elt vector -- ) dup empty? [ push ] [ sum-push ] if ; inline : my-accumulator ( quot -- quot' vec ) V{ } clone [ [ my-push ] curry compose ] keep ; inline : produce-sum ( pred: ( -- ? ) quot: ( -- elt ) -- sum ) my-accumulator [ while ] dip first ; inline