Kotlin quádruplo, quintuplo, etc. para desestruturação

Estou procurando uma maneira limpa de criar objetos destrutíveis em linha.kotlin.Pair ekotlin.Triple abrangem muitos casos de uso, mas às vezes há mais objetos que precisam ser passados.

Um exemplo de caso de uso é o RXzip , em que os resultados de várias chamadas de E / S precisam ser mapeados para outro objeto:

Single
    .zip(repositoryA.loadData(someId),
         repositoryB.loadData(someId),
         repositoryC.loadAll(),
         repositoryD.loadAll()),
         { objectA, objectB, objectsC, objectsD -> /*some Kotlin magic*/ }
    )
    .map { (objectA, objectB, objectsC, objectsD) -> /*do the mapping*/ }

Estou tentando descobrir o que seria da parte "alguma mágica de Kotlin". Se houvesse apenas 3 repositórios, seria

Triple(objectA, objectB, objectsC)

Preciso criar uma nova classe de dados para isso e para qualquer caso de n-tupla, ou existe outra maneira?

questionAnswers(3)

yourAnswerToTheQuestion