package fpeas.maybe; import fpeas.function.Function; public class MaybeUtility { public static Maybe nothing() { return new Maybe() { public R accept(final Function ifExists, final R reserve) { return reserve; } }; } public static Maybe just(final T thing) { return new Maybe() { public R accept(final Function ifExists, final R reserve) { return ifExists.run(thing); } }; } public static Function> just() { return new Function>() { public Maybe run(final T input) { return just(input); } }; } public static Maybe fromNullable(final T mayBeNull) { if (mayBeNull==null) return nothing(); return just(mayBeNull); } public static Function> justFunction(final Function function) { return new Function>() { public Maybe run(final T input) { return just(function.run(input)); } }; } public static Function,Maybe> maybeFunction(final Function function) { return new Function,Maybe>() { public Maybe run(final Maybe maybe) { final Maybe nothing=nothing(); return maybe.accept(justFunction(function),nothing); } }; } }