``` fun main(args: Array<String>) = runBlock...
# coroutines
d
Copy code
fun main(args: Array<String>) = runBlocking<Unit> {
    val numbers = produceNumbers() // produces integers from 1 and on
    val squares = square(numbers) // squares integers
    for (i in 1..5) println(squares.receive()) // print first five
    println("Done!") // we are done
    squares.cancel() // need to cancel these coroutines in a larger app
    numbers.cancel()
}
even these channels should be canceled? looks like they are finite and should be closed automatically. correct me if im wrong