mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-06-24 05:21:16 +00:00
finish maybe
This commit is contained in:
@@ -4,6 +4,7 @@ import com.dfsek.terra.api.util.generic.control.Monad;
|
|||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
|
||||||
public interface Maybe<T> extends Monad<T, Maybe<?>> {
|
public interface Maybe<T> extends Monad<T, Maybe<?>> {
|
||||||
@@ -17,14 +18,18 @@ public interface Maybe<T> extends Monad<T, Maybe<?>> {
|
|||||||
|
|
||||||
Optional<T> toOptional();
|
Optional<T> toOptional();
|
||||||
|
|
||||||
|
<L> Either<L, T> toEither(L l);
|
||||||
|
T get(Supplier<T> def);
|
||||||
|
|
||||||
|
default T get(T def) {
|
||||||
|
return get(() -> def);
|
||||||
|
}
|
||||||
|
|
||||||
|
default <T1> Maybe<T1> overwrite(Maybe<T1> m) {
|
||||||
|
return bind(ignore -> m);
|
||||||
|
}
|
||||||
|
|
||||||
static <T1> Maybe<T1> just(T1 t) {
|
static <T1> Maybe<T1> just(T1 t) {
|
||||||
return new Just<>(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
static <T1> Maybe<T1> nothing() {
|
|
||||||
return new Nothing<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
record Just<T>(T value) implements Maybe<T> {
|
record Just<T>(T value) implements Maybe<T> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -32,11 +37,25 @@ public interface Maybe<T> extends Monad<T, Maybe<?>> {
|
|||||||
return Optional.of(value);
|
return Optional.of(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <L> Either<L, T> toEither(L l) {
|
||||||
|
return Either.right(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T get(Supplier<T> def) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T2> Maybe<T2> bind(Function<T, Monad<T2, Maybe<?>>> map) {
|
public <T2> Maybe<T2> bind(Function<T, Monad<T2, Maybe<?>>> map) {
|
||||||
return (Maybe<T2>) map.apply(value);
|
return (Maybe<T2>) map.apply(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return new Just<>(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
static <T1> Maybe<T1> nothing() {
|
||||||
record Nothing<T>() implements Maybe<T> {
|
record Nothing<T>() implements Maybe<T> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -48,5 +67,17 @@ public interface Maybe<T> extends Monad<T, Maybe<?>> {
|
|||||||
public Optional<T> toOptional() {
|
public Optional<T> toOptional() {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <L> Either<L, T> toEither(L l) {
|
||||||
|
return Either.left(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T get(Supplier<T> def) {
|
||||||
|
return def.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Nothing<>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user