aimozg
interface BinarySameType { operator fun<T> invoke(a:T,b:T):T } fun <U> weirdChoice(random: BinarySameType, c1: U, c2: U): U { if (random(true, false)) { return random(c1, c2) } else { return random(c2, c1) } }