1 package io.atlassian.fugue.optic.law;
2
3 import io.atlassian.fugue.law.IsEq;
4 import io.atlassian.fugue.optic.PSetter;
5
6 import java.util.function.Function;
7
8 import static io.atlassian.fugue.law.IsEq.isEq;
9
10 public final class SetterLaws<S, A> {
11
12 private final PSetter<S, S, A, A> setter;
13
14 public SetterLaws(PSetter<S, S, A, A> setter) {
15 this.setter = setter;
16 }
17
18
19
20
21 public IsEq<S> setIdempotent(S s, A a) {
22 return isEq(setter.set(a).apply(setter.set(a).apply(s)), setter.set(a).apply(s));
23 }
24
25
26
27
28 public IsEq<S> modifyIdentity(S s) {
29 return isEq(setter.modify(Function.<A> identity()).apply(s), s);
30 }
31
32 }