interface IBStack { // declare a choice point for later backtracking void options(B function, IVF1... options); void options(B function, Iterable> options); // record an undoable action for backtracking void addUndo aka temp(AutoCloseable undo); A nextResult(); A nextResultWithPrintStruct(long maxSteps); }