// Path: src/main/java/tech/pinto/Pinto.java
// @FunctionalInterface
// public static interface StackFunction extends TableFunction {
// 	void accept(Pinto p, Stack s);
// 
// 	default void accept(Pinto p, Table t) {
// 			List<Stack> inputs = t.takeTop();
// 			for(int i = 0; i < inputs.size(); i++) {
// 				accept(p, inputs.get(i));
// 			}
// 			t.insertAtTop(inputs);
// 	}
// }
// 
// Path: src/main/java/tech/pinto/Pinto.java
// @FunctionalInterface
// public static interface TableFunction extends BiConsumer<Pinto,Table> {}
// 
// Path: src/main/java/tech/pinto/Pinto.java
// @FunctionalInterface
// public static interface TerminalFunction extends BiFunction<Pinto,Expression,Table> {}


import java.util.HashSet;
import java.util.Optional;
import tech.pinto.Pinto.StackFunction;
import tech.pinto.Pinto.TableFunction;
import tech.pinto.Pinto.TerminalFunction;

		if(indexString.isPresent()) {
			sb.append("\t").append("Default indexer: ").append(indexString).append(crlf);
		}
		sb.append("\t").append(description).append(crlf);
		return sb.toString();
	}

	@Override
	public String toString() {
        return name;
    }
	
	public static Builder nameBuilder(String name, StackFunction function) {
		return new Builder(name, function);
	}

	public static Builder nameBuilder(String name, TableFunction function) {
		return new Builder(name, function);
	}

	public static Builder terminalNameBuilder(String name, TerminalFunction function) {
		return new Builder(name, function);
	}
	
	public static class Builder {
		private final String name;
		private final Optional<TableFunction> tableFunction;
		private final Optional<TerminalFunction> terminalFunction;
		private Optional<String> indexer = Optional.empty();
		private boolean isBuiltIn = true;

// Path: src/main/java/tech/pinto/Pinto.java
// @FunctionalInterface
// public static interface StackFunction extends TableFunction {
// 	void accept(Pinto p, Stack s);
// 
// 	default void accept(Pinto p, Table t) {
// 			List<Stack> inputs = t.takeTop();
// 			for(int i = 0; i < inputs.size(); i++) {
// 				accept(p, inputs.get(i));
// 			}
// 			t.insertAtTop(inputs);
// 	}
// }
// 
// Path: src/main/java/tech/pinto/Pinto.java
// @FunctionalInterface
// public static interface TableFunction extends BiConsumer<Pinto,Table> {}
// 
// Path: src/main/java/tech/pinto/Pinto.java
// @FunctionalInterface
// public static interface TerminalFunction extends BiFunction<Pinto,Expression,Table> {}


// Path: src/main/java/tech/pinto/Name.java
import java.util.HashSet;
import java.util.Optional;
import tech.pinto.Pinto.StackFunction;
import tech.pinto.Pinto.TableFunction;
import tech.pinto.Pinto.TerminalFunction;

		if(indexString.isPresent()) {
			sb.append("\t").append("Default indexer: ").append(indexString).append(crlf);
		}
		sb.append("\t").append(description).append(crlf);
		return sb.toString();
	}

	@Override
	public String toString() {
        return name;
    }
	
	public static Builder nameBuilder(String name, StackFunction function) {
		return new Builder(name, function);
	}

	public static Builder nameBuilder(String name, TableFunction function) {
		return new Builder(name, function);
	}

	public static Builder terminalNameBuilder(String name, TerminalFunction function) {
		return new Builder(name, function);
	}
	
	public static class Builder {
		private final String name;
		private final Optional<TableFunction> tableFunction;
		private final Optional<TerminalFunction> terminalFunction;
		private Optional<String> indexer = Optional.empty();
		private boolean isBuiltIn = true;

		private String description = "";
