import java.util.Objects;
import java.util.Optional;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Supplier;
@FunctionalInterface
interface FunctionalField<FIELD extends Enum<?>> {
public Object untypedField
(FIELD field
);
@SuppressWarnings("unchecked")
public default <VALUE> VALUE field(FIELD field) {
return (VALUE) untypedField(field);
}
public static <FIELD
extends Enum
<FIELD
>> Object throwOnUndefinedField
(FIELD field
) throws Error { }
}
@FunctionalInterface
interface Cell<ELEMENT> {
public <VALUE> VALUE select(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil);
public static <ELEMENT, VALUE> VALUE nil(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons,
Supplier<? extends VALUE> nil) {
return nil.get();
}
public default int size() {
return select(
(element, next) -> 1 + next.size(),
() -> 0
);
}
public default Cell<ELEMENT> first(int size) {
return Optional.of(size)
.<Cell<ELEMENT>>map(s -> select(
(element, next) -> s == 0
? nil()
: cons(element, next.first(s - 1))
,
Cell::nil
))
;
}
public default <ELEMENT2> Cell<ELEMENT2> map(Function<? super ELEMENT, ? extends ELEMENT2> mapper) {
return select(
(element, next) -> Cell.cons(mapper.apply(element), next.map(mapper)),
Cell::nil
);
}
public default <ELEMENT2> Cell<ELEMENT2> flatMap(Function<? super ELEMENT, Cell<ELEMENT2>> mapper) {
return select(
(element, next) -> mapper
.apply(element)
.select(
Cell::cons,
() -> next.flatMap(mapper)
)
,
Cell::nil
);
}
public interface Cons<ELEMENT> {
public ELEMENT element();
public Cell<ELEMENT> next();
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
return cons.apply(element(), next());
}
public static <ELEMENT> Cons<ELEMENT> new_(ELEMENT element, Cell<ELEMENT> next) {
return $.$Cons.new_(element, next);
}
public enum $ {
;
@FunctionalInterface
private interface $Cons<ELEMENT> extends Cons<ELEMENT>, FunctionalField<$Cons.Field> {
element,
next
}
@Override
public default ELEMENT element() {
return field
(Field.
element); }
public default Cell<ELEMENT> next() {
return field
(Field.
next); }
public static <ELEMENT> $Cons<ELEMENT> new_(ELEMENT element, Cell<ELEMENT> next) {
return field -> {
switch (field) {
case element: return element;
case next: return next;
default: return FunctionalField.throwOnUndefinedField(field);
}
};
}
}
}
}
public static <ELEMENT> Cell<ELEMENT> nil() {
return Cell::nil;
}
public static <ELEMENT> Cell<ELEMENT> cons(ELEMENT element, Cell<ELEMENT> next) {
Objects.requireNonNull(element);
Objects.requireNonNull(next);
return Cons.new_(element, next)::cons;
}
public static void main
(String...
arguments) { System.
out.
println(nil
() == nil
()); // true Cell<Integer> cell =
cons(1, cons(2, cons(3, nil())))
;
System.
out.
println(cell.
size() == 3); // true System.
out.
println(cell.
first(2).
size() == 2); // true }
}
public interface Main {
public static void main
(String...
arguments) { Cell.main(arguments);
}
}
aW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwppbXBvcnQgamF2YS51dGlsLk9wdGlvbmFsOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLkJpRnVuY3Rpb247CmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247CmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uU3VwcGxpZXI7CgpARnVuY3Rpb25hbEludGVyZmFjZQppbnRlcmZhY2UgRnVuY3Rpb25hbEZpZWxkPEZJRUxEIGV4dGVuZHMgRW51bTw/Pj4gewogIHB1YmxpYyBPYmplY3QgdW50eXBlZEZpZWxkKEZJRUxEIGZpZWxkKTsKCiAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgcHVibGljIGRlZmF1bHQgPFZBTFVFPiBWQUxVRSBmaWVsZChGSUVMRCBmaWVsZCkgewogICAgcmV0dXJuIChWQUxVRSkgdW50eXBlZEZpZWxkKGZpZWxkKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgPEZJRUxEIGV4dGVuZHMgRW51bTxGSUVMRD4+IE9iamVjdCB0aHJvd09uVW5kZWZpbmVkRmllbGQoRklFTEQgZmllbGQpIHRocm93cyBFcnJvciB7CiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihmaWVsZCArICIgaXMgdW5kZWZpbmVkIik7CiAgfQp9CgpARnVuY3Rpb25hbEludGVyZmFjZQppbnRlcmZhY2UgQ2VsbDxFTEVNRU5UPiB7CiAgcHVibGljIDxWQUxVRT4gVkFMVUUgc2VsZWN0KEJpRnVuY3Rpb248PyBzdXBlciBFTEVNRU5ULCBDZWxsPEVMRU1FTlQ+LCA/IGV4dGVuZHMgVkFMVUU+IGNvbnMsIFN1cHBsaWVyPD8gZXh0ZW5kcyBWQUxVRT4gbmlsKTsKCiAgcHVibGljIHN0YXRpYyA8RUxFTUVOVCwgVkFMVUU+IFZBTFVFIG5pbChCaUZ1bmN0aW9uPD8gc3VwZXIgRUxFTUVOVCwgQ2VsbDxFTEVNRU5UPiwgPyBleHRlbmRzIFZBTFVFPiBjb25zLAogICAgU3VwcGxpZXI8PyBleHRlbmRzIFZBTFVFPiBuaWwpIHsKICAgIHJldHVybiBuaWwuZ2V0KCk7CiAgfQoKICBwdWJsaWMgZGVmYXVsdCBpbnQgc2l6ZSgpIHsKICAgIHJldHVybiBzZWxlY3QoCiAgICAgIChlbGVtZW50LCBuZXh0KSAtPiAxICsgbmV4dC5zaXplKCksCiAgICAgICgpIC0+IDAKICAgICk7CiAgfQoKICBwdWJsaWMgZGVmYXVsdCBDZWxsPEVMRU1FTlQ+IGZpcnN0KGludCBzaXplKSB7CiAgICByZXR1cm4gT3B0aW9uYWwub2Yoc2l6ZSkKICAgICAgLjxDZWxsPEVMRU1FTlQ+Pm1hcChzIC0+IHNlbGVjdCgKICAgICAgICAoZWxlbWVudCwgbmV4dCkgLT4gcyA9PSAwCiAgICAgICAgICA/IG5pbCgpCiAgICAgICAgICA6IGNvbnMoZWxlbWVudCwgbmV4dC5maXJzdChzIC0gMSkpCiAgICAgICAgLAogICAgICAgIENlbGw6Om5pbAogICAgICApKQogICAgICAub3JFbHNlVGhyb3coSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uOjpuZXcpCiAgICA7CiAgfQoKICBwdWJsaWMgZGVmYXVsdCA8RUxFTUVOVDI+IENlbGw8RUxFTUVOVDI+IG1hcChGdW5jdGlvbjw/IHN1cGVyIEVMRU1FTlQsID8gZXh0ZW5kcyBFTEVNRU5UMj4gbWFwcGVyKSB7CiAgICByZXR1cm4gc2VsZWN0KAogICAgICAoZWxlbWVudCwgbmV4dCkgLT4gQ2VsbC5jb25zKG1hcHBlci5hcHBseShlbGVtZW50KSwgbmV4dC5tYXAobWFwcGVyKSksCiAgICAgIENlbGw6Om5pbAogICAgKTsKICB9CgogIHB1YmxpYyBkZWZhdWx0IDxFTEVNRU5UMj4gQ2VsbDxFTEVNRU5UMj4gZmxhdE1hcChGdW5jdGlvbjw/IHN1cGVyIEVMRU1FTlQsIENlbGw8RUxFTUVOVDI+PiBtYXBwZXIpIHsKICAgIHJldHVybiBzZWxlY3QoCiAgICAgIChlbGVtZW50LCBuZXh0KSAtPiBtYXBwZXIKICAgICAgICAuYXBwbHkoZWxlbWVudCkKICAgICAgICAuc2VsZWN0KAogICAgICAgICAgQ2VsbDo6Y29ucywKICAgICAgICAgICgpIC0+IG5leHQuZmxhdE1hcChtYXBwZXIpCiAgICAgICAgKQogICAgICAsCiAgICAgIENlbGw6Om5pbAogICAgKTsKICB9CgogIHB1YmxpYyBpbnRlcmZhY2UgQ29uczxFTEVNRU5UPiB7CiAgICBwdWJsaWMgRUxFTUVOVCBlbGVtZW50KCk7CiAgICBwdWJsaWMgQ2VsbDxFTEVNRU5UPiBuZXh0KCk7CgogICAgcHVibGljIGRlZmF1bHQgPFZBTFVFPiBWQUxVRSBjb25zKEJpRnVuY3Rpb248PyBzdXBlciBFTEVNRU5ULCBDZWxsPEVMRU1FTlQ+LCA/IGV4dGVuZHMgVkFMVUU+IGNvbnMsIFN1cHBsaWVyPD8gZXh0ZW5kcyBWQUxVRT4gbmlsKSB7CiAgICAgIHJldHVybiBjb25zLmFwcGx5KGVsZW1lbnQoKSwgbmV4dCgpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIDxFTEVNRU5UPiBDb25zPEVMRU1FTlQ+IG5ld18oRUxFTUVOVCBlbGVtZW50LCBDZWxsPEVMRU1FTlQ+IG5leHQpIHsKICAgICAgcmV0dXJuICQuJENvbnMubmV3XyhlbGVtZW50LCBuZXh0KTsKICAgIH0KCiAgICBwdWJsaWMgZW51bSAkIHsKICAgICAgOwoKICAgICAgQEZ1bmN0aW9uYWxJbnRlcmZhY2UKICAgICAgcHJpdmF0ZSBpbnRlcmZhY2UgJENvbnM8RUxFTUVOVD4gZXh0ZW5kcyBDb25zPEVMRU1FTlQ+LCBGdW5jdGlvbmFsRmllbGQ8JENvbnMuRmllbGQ+IHsKICAgICAgICBwdWJsaWMgZW51bSBGaWVsZCB7CiAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgbmV4dAogICAgICAgIH0KCiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIGRlZmF1bHQgRUxFTUVOVCBlbGVtZW50KCkgewogICAgICAgICAgcmV0dXJuIGZpZWxkKEZpZWxkLmVsZW1lbnQpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIGRlZmF1bHQgQ2VsbDxFTEVNRU5UPiBuZXh0KCkgewogICAgICAgICAgcmV0dXJuIGZpZWxkKEZpZWxkLm5leHQpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIHN0YXRpYyA8RUxFTUVOVD4gJENvbnM8RUxFTUVOVD4gbmV3XyhFTEVNRU5UIGVsZW1lbnQsIENlbGw8RUxFTUVOVD4gbmV4dCkgewogICAgICAgICAgcmV0dXJuIGZpZWxkIC0+IHsKICAgICAgICAgICAgc3dpdGNoIChmaWVsZCkgewogICAgICAgICAgICAgIGNhc2UgZWxlbWVudDogcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgICAgICAgY2FzZSBuZXh0OiByZXR1cm4gbmV4dDsKICAgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gRnVuY3Rpb25hbEZpZWxkLnRocm93T25VbmRlZmluZWRGaWVsZChmaWVsZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBwdWJsaWMgc3RhdGljIDxFTEVNRU5UPiBDZWxsPEVMRU1FTlQ+IG5pbCgpIHsKICAgIHJldHVybiBDZWxsOjpuaWw7CiAgfQoKICBwdWJsaWMgc3RhdGljIDxFTEVNRU5UPiBDZWxsPEVMRU1FTlQ+IGNvbnMoRUxFTUVOVCBlbGVtZW50LCBDZWxsPEVMRU1FTlQ+IG5leHQpIHsKICAgIE9iamVjdHMucmVxdWlyZU5vbk51bGwoZWxlbWVudCk7CiAgICBPYmplY3RzLnJlcXVpcmVOb25OdWxsKG5leHQpOwogICAgcmV0dXJuIENvbnMubmV3XyhlbGVtZW50LCBuZXh0KTo6Y29uczsKICB9CgogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZy4uLiBhcmd1bWVudHMpIHsKICAgIFN5c3RlbS5vdXQucHJpbnRsbihuaWwoKSA9PSBuaWwoKSk7ICAvLyB0cnVlCiAgICBDZWxsPEludGVnZXI+IGNlbGwgPQogICAgICBjb25zKDEsIGNvbnMoMiwgY29ucygzLCBuaWwoKSkpKQogICAgOwogICAgU3lzdGVtLm91dC5wcmludGxuKGNlbGwuc2l6ZSgpID09IDMpOyAgLy8gdHJ1ZQogICAgU3lzdGVtLm91dC5wcmludGxuKGNlbGwuZmlyc3QoMikuc2l6ZSgpID09IDIpOyAgLy8gdHJ1ZQogIH0KfQoKcHVibGljIGludGVyZmFjZSBNYWluIHsKICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcuLi4gYXJndW1lbnRzKSB7CiAgICBDZWxsLm1haW4oYXJndW1lbnRzKTsKICB9Cn0=
Main.java:12: error: illegal start of type
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: = expected
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: ';' expected
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: illegal start of type
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: = expected
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: illegal start of type
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: = expected
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: illegal start of type
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:12: error: <identifier> expected
public default <VALUE> VALUE field(FIELD field) {
^
Main.java:13: error: = expected
return (VALUE) untypedField(field);
^
Main.java:13: error: ';' expected
return (VALUE) untypedField(field);
^
Main.java:13: error: <identifier> expected
return (VALUE) untypedField(field);
^
Main.java:13: error: ';' expected
return (VALUE) untypedField(field);
^
Main.java:13: error: illegal start of type
return (VALUE) untypedField(field);
^
Main.java:13: error: = expected
return (VALUE) untypedField(field);
^
Main.java:16: error: class, interface, or enum expected
public static <FIELD extends Enum<FIELD>> Object throwOnUndefinedField(FIELD field) throws Error {
^
Main.java:18: error: class, interface, or enum expected
}
^
Main.java:30: error: illegal start of type
public default int size() {
^
Main.java:30: error: = expected
public default int size() {
^
Main.java:30: error: ';' expected
public default int size() {
^
Main.java:30: error: illegal start of type
public default int size() {
^
Main.java:30: error: <identifier> expected
public default int size() {
^
Main.java:30: error: = expected
public default int size() {
^
Main.java:30: error: ';' expected
public default int size() {
^
Main.java:31: error: <identifier> expected
return select(
^
Main.java:32: error: illegal start of type
(element, next) -> 1 + next.size(),
^
Main.java:32: error: ')' expected
(element, next) -> 1 + next.size(),
^
Main.java:32: error: ';' expected
(element, next) -> 1 + next.size(),
^
Main.java:32: error: <identifier> expected
(element, next) -> 1 + next.size(),
^
Main.java:32: error: ';' expected
(element, next) -> 1 + next.size(),
^
Main.java:32: error: illegal start of type
(element, next) -> 1 + next.size(),
^
Main.java:32: error: <identifier> expected
(element, next) -> 1 + next.size(),
^
Main.java:32: error: = expected
(element, next) -> 1 + next.size(),
^
Main.java:32: error: ';' expected
(element, next) -> 1 + next.size(),
^
Main.java:32: error: illegal start of type
(element, next) -> 1 + next.size(),
^
Main.java:32: error: ';' expected
(element, next) -> 1 + next.size(),
^
Main.java:37: error: class, interface, or enum expected
public default Cell<ELEMENT> first(int size) {
^
Main.java:48: error: class, interface, or enum expected
}
^
Main.java:50: error: class, interface, or enum expected
public default <ELEMENT2> Cell<ELEMENT2> map(Function<? super ELEMENT, ? extends ELEMENT2> mapper) {
^
Main.java:55: error: class, interface, or enum expected
}
^
Main.java:57: error: class, interface, or enum expected
public default <ELEMENT2> Cell<ELEMENT2> flatMap(Function<? super ELEMENT, Cell<ELEMENT2>> mapper) {
^
Main.java:68: error: class, interface, or enum expected
}
^
Main.java:74: error: illegal start of type
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: ';' expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: illegal start of type
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: illegal start of type
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: illegal start of type
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: <identifier> expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: <identifier> expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: <identifier> expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: ';' expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: <identifier> expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: ';' expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: illegal start of type
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: illegal start of type
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: <identifier> expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: = expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: ';' expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: <identifier> expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:74: error: ';' expected
public default <VALUE> VALUE cons(BiFunction<? super ELEMENT, Cell<ELEMENT>, ? extends VALUE> cons, Supplier<? extends VALUE> nil) {
^
Main.java:75: error: illegal start of type
return cons.apply(element(), next());
^
Main.java:75: error: = expected
return cons.apply(element(), next());
^
Main.java:75: error: <identifier> expected
return cons.apply(element(), next());
^
Main.java:75: error: <identifier> expected
return cons.apply(element(), next());
^
Main.java:75: error: ';' expected
return cons.apply(element(), next());
^
Main.java:75: error: illegal start of type
return cons.apply(element(), next());
^
Main.java:75: error: ';' expected
return cons.apply(element(), next());
^
Main.java:78: error: class, interface, or enum expected
public static <ELEMENT> Cons<ELEMENT> new_(ELEMENT element, Cell<ELEMENT> next) {
^
Main.java:80: error: class, interface, or enum expected
}
^
Main.java:93: error: illegal start of type
public default ELEMENT element() {
^
Main.java:93: error: = expected
public default ELEMENT element() {
^
Main.java:93: error: ';' expected
public default ELEMENT element() {
^
Main.java:93: error: illegal start of type
public default ELEMENT element() {
^
Main.java:93: error: <identifier> expected
public default ELEMENT element() {
^
Main.java:93: error: = expected
public default ELEMENT element() {
^
Main.java:93: error: ';' expected
public default ELEMENT element() {
^
Main.java:94: error: <identifier> expected
return field(Field.element);
^
Main.java:94: error: <identifier> expected
return field(Field.element);
^
Main.java:97: error: illegal start of type
public default Cell<ELEMENT> next() {
^
Main.java:97: error: ';' expected
public default Cell<ELEMENT> next() {
^
Main.java:97: error: invalid method declaration; return type required
public default Cell<ELEMENT> next() {
^
Main.java:102: error: illegal start of expression
return field -> {
^
Main.java:102: error: illegal start of expression
return field -> {
^
Main.java:110: error: class, interface, or enum expected
}
^
Main.java:114: error: class, interface, or enum expected
public static <ELEMENT> Cell<ELEMENT> nil() {
^
Main.java:116: error: class, interface, or enum expected
}
^
Main.java:118: error: class, interface, or enum expected
public static <ELEMENT> Cell<ELEMENT> cons(ELEMENT element, Cell<ELEMENT> next) {
^
Main.java:120: error: class, interface, or enum expected
Objects.requireNonNull(next);
^
Main.java:121: error: class, interface, or enum expected
return Cons.new_(element, next)::cons;
^
Main.java:122: error: class, interface, or enum expected
}
^
Main.java:124: error: class, interface, or enum expected
public static void main(String... arguments) {
^
Main.java:126: error: class, interface, or enum expected
Cell<Integer> cell =
^
Main.java:129: error: class, interface, or enum expected
System.out.println(cell.size() == 3); // true
^
100 errors