// WITH_STDLIB @file:OptIn(kotlin.experimental.ExperimentalTypeInference::class) interface Flow { fun collect(collector: FlowCollector) } interface FlowCollector { fun emit(value: T) } fun flow(block: FlowCollector.() -> Unit): Flow = object : Flow { override fun collect(collector: FlowCollector) = collector.block() } fun Flow.collect(action: (value: T) -> Unit): Unit = collect(object : FlowCollector { override fun emit(value: T) = action(value) }) fun Flow.transform(transform: FlowCollector.(T) -> Unit): Flow = flow { collect { transform(it) } } fun Flow.map(transform: (T) -> R): Flow = transform { emit(transform(it)) } var result: Any? = "not null" fun main() { flow { emit(1) }.map { null }.collect { result = it } } fun box(): String { main() return if (result == null) "OK" else "fail: $result" }