public abstract class Either { public static Either left(A a) { new Left<>(a); } public static Either right(B b) { new Right<>(b); } public abstract boolean isLeft(); public abstract boolean isRight(); public abstract X fold(Fold l, Fold r); } &JUIFSKBWB
public class Left extends Either { private final A a; public Left(A a) { this.a = a; } @Override public boolean isLeft() { return true; } @Override public boolean isRight() { return false; } @Override public X fold(Fold l, Fold r) { return l.fold(a); } } -FGUKBWB 3JHIUKBWB
&JUIFSLU data class Left(val value: A) : Either() { override val isLeft: Boolean = true override val isRight: Boolean = false } data class Right(val value: B) : Either() { override val isLeft: Boolean = false override val isRight: Boolean = true }
&JUIFSLU inline fun Either.fold( left: (A) -> X, right: (B) -> X ): X = when (this) { is Left -> left(value) is Right -> right(value) } XIFO䒭ד㘗ח䘔ׄג㹋遤ׅꟼ侧ⴖ剏ִ