interface Iso { T deply(R r); default Iso inverse() { final Iso z = this; return new Iso() { @Override public R deply(T t) { throw null; } }; } static Iso inverse(Iso z) { return new Iso() { @Override public R deply(T t) { throw null; } }; } }