|  | // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | package lambdas_kstyle_generics | 
|  |  | 
|  | private var COUNT = 11 | 
|  |  | 
|  | private fun next() = "${COUNT++}" | 
|  |  | 
|  | data class Alpha(val id: String = next()) | 
|  |  | 
|  | data class Beta(val id: String = next()) | 
|  |  | 
|  | data class Gamma<out T>(val payload: T?, val id: String = next()) | 
|  |  | 
|  | fun <T> consume(t: T, l: (t: T) -> String) = l(t) | 
|  |  | 
|  | fun main(args: Array<String>) { | 
|  | println(consume(Any(), { "${Alpha()}" })) | 
|  | println(consume(Any(), { "${Beta()}" })) | 
|  | println(consume(Any(), { "${Gamma("{any}")}" })) | 
|  | println(consume(Alpha(), { "$it" })) | 
|  |  | 
|  | testFirst(11) | 
|  | testSecond(22) | 
|  | testThird() | 
|  | } | 
|  |  | 
|  | private fun testFirst(sh: Short) { | 
|  | val prefix = "First" | 
|  | println(consume(Beta(), { "$prefix-1-$it" })) | 
|  | println(consume(Beta(), { "$prefix-2-$it" })) | 
|  | println(consume(Beta(), { "$prefix-3-$it" })) | 
|  | println(consume(Gamma(next()), { "$prefix-A-$it-$sh" })) | 
|  | println(consume(Gamma(next()), { "$prefix-B-$it-$sh" })) | 
|  | println(consume(Gamma(next()), { "$prefix-C-$it-$sh" })) | 
|  | println(consume(Gamma(COUNT++), { "$prefix-D-$it-$sh" })) | 
|  | println(consume(Gamma(COUNT++), { "$prefix-E-$it-$sh" })) | 
|  | println(consume(Gamma(COUNT++), { "$prefix-F-$it-$sh" })) | 
|  | } | 
|  |  | 
|  | private fun testSecond(sh: Short) { | 
|  | val prefix = "Second" | 
|  | println(consume(Beta(), { "$prefix-1-$it" })) | 
|  | println(consume(Beta(), { "$prefix-2-$it" })) | 
|  | println(consume(Beta(), { "$prefix-3-$it" })) | 
|  | println(consume(Gamma(next()), { "$prefix-A-$it-$sh" })) | 
|  | println(consume(Gamma(next()), { "$prefix-B-$it-$sh" })) | 
|  | println(consume(Gamma(next()), { "$prefix-C-$it-$sh" })) | 
|  | println(consume(Gamma(COUNT++), { "$prefix-D-$it-$sh" })) | 
|  | println(consume(Gamma(COUNT++), { "$prefix-E-$it-$sh" })) | 
|  | println(consume(Gamma(COUNT++), { "$prefix-F-$it-$sh" })) | 
|  | } | 
|  |  | 
|  | private fun testThird() { | 
|  | println(consume(4321, { "$it ${next()} ${next()} ${next()}" })) | 
|  | println(consume(1234, { "$it ${Alpha()} ${Beta()} ${Gamma(next())}" })) | 
|  | } | 
|  |  |