1 package io.atlassian.fugue.optic.std;
2
3 import io.atlassian.fugue.Either;
4 import io.atlassian.fugue.Option;
5 import io.atlassian.fugue.optic.Iso;
6 import io.atlassian.fugue.optic.PPrism;
7 import io.atlassian.fugue.optic.Prism;
8
9 import java.util.Optional;
10
11 import static io.atlassian.fugue.Either.left;
12 import static io.atlassian.fugue.Option.none;
13 import static io.atlassian.fugue.optic.PPrism.pPrism;
14
15 public class OptionOptics {
16
17 private OptionOptics() {}
18
19 public static <A, B> PPrism<Option<A>, Option<B>, A, B> pSome() {
20 return pPrism(oa -> oa.fold(() -> left(none()), Either::right), Option::some);
21 }
22
23 public static <A> Prism<Option<A>, A> some() {
24 return new Prism<>(pSome());
25 }
26
27 public static <A> Iso<Option<A>, Optional<A>> optionToOptional() {
28 return Iso.iso(Option::toOptional, Option::fromOptional);
29 }
30
31 }