default @NotNull EdgeType unite(@NotNull EdgeType other) {
      return new EdgeType() {
        @Override
        public int mask() {
          return EdgeType.this.mask() | other.mask();
        }
      };
    }
default @NotNull EdgeType unite(@NotNull EdgeType other)