import java.util.*; import java.util.Optional; import java.util.function.BiFunction; import java.util.function.Supplier; class A<T> { public <S> S foldRight(Supplier<S> value, BiFunction<T, Supplier<S>, Supplier<S>> f) { return null; } public static <S> Optional<S> h(A<S> flow) { return flow.foldRight(() -> Optional.empty(), (element, lazyResult) -> () -> Optional.of(element)); } public static <S> Optional<S> hR(A<S> flow) { return flow.foldRight(Optional::empty, (element, lazyResult) -> () -> Optional.of(element)); } }