Posted to tcl by pooryorick at Wed Apr 20 13:51:28 GMT 2016view pretty

#! /bin/env tclsh

proc r {} {
    set name [info cmdcount]
    namespace eval $name {
        namespace export *
        namespace ensemble create

        proc finalize {id} {
        }

        proc initialize {id spec} {
            return {finalize initialize read watch}
        }

        proc read {id count} {
            after 0 [list after idle [list [info coroutine]]]
            yield
            return hello\n
        }

        proc watch {id spec} {
        }
    }
    return $name
}

after 0 [list coroutine main apply {{argv0 argv} {
    set r1 [r]
    set chan [chan create read $r1] 
    gets $chan line
    puts $line
}} $argv0 $argv]
vwait forever