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