import java.util.function.Function; import org.derive4j.Data; @Data interface Either { X match(Function left, Function right); static void main(String[] args) { Either l = Eithers.left(-1); Either r = Eithers.right("Ok"); Function, String> toString = Eithers. cases() .left(String::valueOf) .right(Function.identity()); int intValue = Eithers. caseOf(l) .left(Function.identity()) .right(String::length); int intValue2 = r.match(left -> left, right -> right.length()); } }