package org.fungsi; import org.fungsi.function.UnsafeConsumer; import org.fungsi.function.UnsafeFunction; import org.fungsi.function.UnsafeRunnable; import org.fungsi.function.UnsafeSupplier; import java.io.Serializable; import java.util.function.Supplier; public final class Unit implements Comparable<Unit>, Serializable, UnsafeRunnable, UnsafeSupplier<Unit>, UnsafeFunction<Object, Unit>, UnsafeConsumer<Object>, Runnable, Supplier<Unit> { private Unit() { } @Override public int hashCode() { return 0; } @Override public boolean equals(Object obj) { return obj == this; } @Override public String toString() { return "org.fungsi.Unit"; } @Override public int compareTo(Unit o) { return 0; } @Override public Unit apply(Object o) { return this; } @Override public void run() { } @Override public Unit get() { return this; } @Override public void accept(Object o) { } private static final Unit UNIT = new Unit(); private static final Either<Unit, Object> LEFT = Either.left(UNIT); private static final Either<Object, Unit> RIGHT = Either.right(UNIT); public static Unit instance() { return UNIT; } public static Unit unit() { return instance(); } @SuppressWarnings("unchecked") public static <T> Either<Unit, T> left() { return (Either<Unit, T>) LEFT; } @SuppressWarnings("unchecked") public static <T> Either<T, Unit> right() { return (Either<T, Unit>) RIGHT; } }