I have a function foo which doesn’t compile. It generates sequence (like generateSequence). The while condition s != null should smart cast s from T? to T but it’s not the case because seq has type Sequence<T?>.
My second point is when I add !! and write yield(s!!) the code compiles but compiler warns Unnecessary non-null assertion.
My question is whether it’s possible to make it work without !! and without adding type annotation to sequence call - because that’s why it uses @BuilderInference or how is @BuilderInference supposed to work?
fun <T : Any> foo(seed: T?, next: (T) -> T?): Sequence<T> {
val seq = sequence {
var s = seed
while (s != null) {
yield(s)
s = next(s)
}
}
return seq
}