M: evens length seq>> length 1 + 2/ ; inline
-M: evens nth-unsafe [ 2 * ] [ seq>> nth-unsafe ] bi* ; inline
+M: evens virtual@ [ 2 * ] [ seq>> ] bi* ; inline
-M: evens like seq>> like ;
-
-M: evens new-sequence seq>> new-sequence ;
+M: evens virtual-exemplar seq>> ; inline
INSTANCE: evens immutable-sequence
+INSTANCE: evens virtual-sequence
+
TUPLE: odds { seq read-only } ;
C: <odds> odds
M: odds length seq>> length 2/ ; inline
-M: odds nth-unsafe [ 2 * 1 + ] [ seq>> nth-unsafe ] bi* ; inline
+M: odds virtual@ [ 2 * 1 + ] [ seq>> ] bi* ; inline
-M: odds like seq>> like ;
-
-M: odds new-sequence seq>> new-sequence ;
+M: odds virtual-exemplar seq>> ; inline
INSTANCE: odds immutable-sequence
+INSTANCE: odds virtual-sequence
+
: until-empty ( seq quot -- )
[ dup empty? ] swap until drop ; inline