    deferred class
    	ITERATOR [G]

    General
    	cluster: base
    	description:
    		"Objects that are able to iterate over traversable structures,
    		on which they can perform repeated actions and tests according
    		to a number of predefined control structures such as ``if'',
    		``until'' and others."

    Ancestors
    	ANY

    Queries
    	for_all (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN
    	invariant_value: BOOLEAN
    	target: TRAVERSABLE [G]
    	there_exists (test: FUNCTION [ANY, TUPLE [G], BOOLEAN]): BOOLEAN

    Commands
    	do_all (action: PROCEDURE [ANY, TUPLE [G]])
    	do_if (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_until (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	do_while (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	set (s: [like target] TRAVERSABLE [G])
    	until_do (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])
    	while_do (action: PROCEDURE [ANY, TUPLE [G]]; test: FUNCTION [ANY, TUPLE [G], BOOLEAN])

    Constraints
    	traversable exists