public static <S, T> Dtor<S, T> dtor(
		final Dtor<? super S, ? extends T> dtor,
		final Function<? super T, ? extends S> mapper,
		final Function<? super S, ?> identity
	) {
		return source -> new BreathFirstIterator<S, T>(
			source, dtor, mapper, identity
		).stream();
	}
Create an <em>recursive</em> extractor function from the given arguments.

@param dtor the extractor function which extracts the direct
       extractable properties
@param mapper mapper function for creating the source object for the
       next level from the extracted objects of type {@code T}
@param identity objects, returned by this function are used for identifying
       already visited source objects, for preventing infinite loops
@return an <em>recursive</em> extractor function
@param <S> the source object type
@param <T> the type of the extracted objects
jenetics.incubator/src/main/java/io/jenetics/incubator/beans/internal/BreathFirstIterator.java