Как создать анонимный интерфейс интерфейса?

У меня есть интерфейс:

interface TileSet { fun contains(x: Int, y: Int) : Boolean } 

Я хочу иметь возможность создавать объединения наборов плиток (tile – пара целочисленных координат x и y):

 fun TileSet.union(another: TileSet) : TileSet = // .. 

В Java 8 я мог бы сделать это следующим образом:

 @FunctionalInterface public interface TileSet { boolean contains(int x, int y); public default TileSet unite(TileSet another) { return (x, y) -> TileSet.this.contains(x, y) && another.contains(x, y); } } 

Таким образом, интерфейс реализован с помощью лямбда в TileSet#unite() . Или он может быть реализован с использованием старого подхода анонимного класса:

 public default TileSet unite(TileSet another) { return new TileSet() { @Override public boolean contains(int x, int y) { return TileSet.this.contains(x, y) && another.contains(x, y); } } } 

Как я могу создать анонимную реализацию интерфейса одного метода в Котлине?

Я знаю, как это сделать, если я использую (Int, Int) -> Boolean вместо TileSet , но я хочу, чтобы тип имел описательное имя, а не только подпись функции.

В документации для анонимных классов есть примеры, но не для интерфейсов.

Вот как я создал экземпляр интерфейса:

 fun TileSet.union(another: TileSet) : TileSet = object : TileSet { override fun contains(x: Int, y: Int) : Boolean = this@union.contains(x, y) || another.contains(x, y) } 

Обратите внимание, что в отличие от примера из документации, после object : TileSet нет скобок object : TileSet .