Baron R
09/11/2017, 1:07 PMsealed class In<T>
data class InInt(val v: Int) : In<Int>()
data class InStr(val v: String) : In<String>()
sealed class Out<T>
data class OutInt(val v: Int) : Out<Int>()
data class OutStr(val v: String) : Out<String>()
fun <T> testTypeInference(i: In<T>) : Out<T> = when(i) {
is InInt -> OutInt(i.v + 1)
is InStr -> OutStr("Hello!" + i.v)
}