Index: doc/papers/concurrency/examples/Fib.c
===================================================================
--- doc/papers/concurrency/examples/Fib.c	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
+++ doc/papers/concurrency/examples/Fib.c	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
@@ -0,0 +1,23 @@
+#include <stdio.h>
+
+#define FIB_INIT { 0, 1 }
+typedef struct { int fn1, fn; } Fib;
+int fib( Fib * f ) {
+
+	int ret = f->fn1;
+	f->fn1 = f->fn;
+	f->fn = ret + f->fn;
+
+	return ret;
+}
+int main() {
+	Fib f1 = FIB_INIT, f2 = FIB_INIT;
+	for ( int i = 0; i < 10; i += 1 ) {
+		printf( "%d %d\n", fib( &f1 ), fib( &f2 ) );
+	}
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "gcc Fib.c" //
+// End: //
Index: doc/papers/concurrency/examples/Fib2.cpp
===================================================================
--- doc/papers/concurrency/examples/Fib2.cpp	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
+++ doc/papers/concurrency/examples/Fib2.cpp	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
@@ -0,0 +1,121 @@
+#include <algorithm>
+#include <iostream>
+#include <iterator>
+#include <vector>
+
+#include <experimental/coroutine>
+
+template<typename T>
+struct cor_range {
+	struct promise_type {
+		T _value;
+
+		cor_range get_return_object() {
+			return cor_range(std::experimental::coroutine_handle<promise_type>::from_promise(*this));
+		}
+
+		auto initial_suspend() { return std::experimental::suspend_always(); }
+		auto final_suspend()   { return std::experimental::suspend_always(); }
+
+		void return_value(T value) {
+			_value = value;
+		}
+
+		auto yield_value(T value) {
+			_value = value;
+			return std::experimental::suspend_always();
+		}
+
+		void unhandled_exception() {}
+	};
+
+	std::experimental::coroutine_handle<promise_type> _coroutine = nullptr;
+
+	explicit cor_range(std::experimental::coroutine_handle<promise_type> coroutine)
+		: _coroutine(coroutine)
+	{}
+
+	~cor_range() {
+		if(_coroutine) { _coroutine.destroy(); }
+	}
+
+	cor_range() = default;
+	cor_range(cor_range const &) = delete;
+	cor_range& operator=(cor_range const &) = delete;
+
+	cor_range(cor_range&& other) {
+		std::swap(_coroutine, other._coroutine);
+	}
+
+	cor_range& operator=(cor_range&& other) {
+		if(&other != this) {
+			_coroutine = other._coroutine;
+			other._coroutine = nullptr;
+		}
+		return *this;
+	}
+
+	T next() {
+		_coroutine.resume();
+		return _coroutine.promise()._value;
+	}
+
+	struct iterator : std::iterator<std::input_iterator_tag, T> {
+		std::experimental::coroutine_handle<promise_type> _coroutine = nullptr;
+
+		iterator() = default;
+		explicit iterator(std::experimental::coroutine_handle<promise_type> coroutine)
+			: _coroutine(coroutine)
+		{}
+
+		iterator& operator++() {
+			_coroutine.resume();
+			return *this;
+		}
+
+		T const & operator*() const {
+			return _coroutine.promise()._value;
+		}
+	};
+
+	iterator begin() {
+		if(_coroutine) {
+			_coroutine.resume();
+			if(_coroutine.done()) { return end(); }
+		}
+
+		return iterator{ _coroutine };
+	}
+
+	iterator end() { return iterator{}; }
+};
+
+cor_range<int> fib() {
+	int fn1 = 0, fn = 1;
+	for(;;) {
+		co_yield fn1;
+		int temp = fn1;
+		fn1 = fn;
+		fn = temp + fn;
+	}
+}
+
+int main() {
+	{
+		auto f1 = fib();
+		auto f2 = fib();
+		for(int i = 0; i < 10; i++) {
+			std::cout << f1.next() << " " << f2.next() << std::endl;
+		}
+	}
+
+	{
+		auto f1 = fib();
+		std::vector<int> fibs;
+		std::copy_n(f1.begin(), 10, std::back_inserter(fibs));
+
+		for(auto i : fibs) {
+			std::cout << i << std::endl;
+		}
+	}
+}
Index: doc/papers/concurrency/examples/Fib2.py
===================================================================
--- doc/papers/concurrency/examples/Fib2.py	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
+++ doc/papers/concurrency/examples/Fib2.py	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
@@ -0,0 +1,15 @@
+def Fib():
+    fn1, fn = 0, 1
+    while True:
+        yield fn1
+        fn1, fn = fn, fn1 + fn
+
+f1 = Fib()
+f2 = Fib()
+for i in range( 10 ):
+	print( next( f1 ), next( f2 ) )  # resume
+
+# Local Variables: #
+# tab-width: 4 #
+# compile-command: "python3.5 Fib2.py" #
+# End: #
Index: doc/papers/concurrency/examples/Pingpong.cc
===================================================================
--- doc/papers/concurrency/examples/Pingpong.cc	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
+++ doc/papers/concurrency/examples/Pingpong.cc	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
@@ -0,0 +1,31 @@
+#include <iostream>
+using namespace std;
+
+_Coroutine PingPong {
+	const char * name;
+	const unsigned int N;
+	PingPong * part;
+	void main() { // ping’s starter ::main, pong’s starter ping
+		for ( unsigned int i = 0; i < N; i += 1 ) {
+			cout << name << endl;
+			part->cycle();
+		}
+	}
+  public:
+	PingPong( const char * name, unsigned int N, PingPong & part )
+		: name( name ), N( N ), part( & part ) {}
+	PingPong( const char * name, unsigned int N ) : name( name ), N( N ) {}
+	void partner( PingPong & part ) { PingPong::part = &part; }
+	void cycle() { resume(); }
+};
+int main() {
+	enum { N = 10 };
+	PingPong ping( "ping", N ), pong( "pong", N, ping );
+	ping.partner( pong );
+	ping.cycle();
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "u++-work -O2 -nodebug Pingpong.cc" //
+// End: //
Index: doc/papers/concurrency/examples/Pingpong.cfa
===================================================================
--- doc/papers/concurrency/examples/Pingpong.cfa	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
+++ doc/papers/concurrency/examples/Pingpong.cfa	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
@@ -0,0 +1,41 @@
+#include <coroutine.hfa>
+#include <fstream.hfa>
+
+coroutine PingPong {
+	const char * name;
+	/* const */ unsigned int N;
+	PingPong * part;
+};
+
+void ?{}( PingPong & this, const char * name, unsigned int N, PingPong & part ) {
+	(this.__cor){name};
+	this.name = name;
+	this.N = N;
+	this.part = &part;
+}
+void ?{}( PingPong & this, const char * name, unsigned int N ) {
+	this{ name, N, *(PingPong *)0 };
+}
+void cycle( PingPong & pingpong ) {
+	resume( pingpong );
+}
+void partner( PingPong & this, PingPong & part ) {
+	this.part = &part;
+	resume( this );
+}
+void main( PingPong & pingpong ) {						// ping's starter ::main, pong's starter ping
+	for ( pingpong.N ) {								// N ping-pongs
+		sout | pingpong.name;
+		cycle( *pingpong.part );
+	} // for
+}
+int main() {
+	enum { N = 20 };
+	PingPong ping = { "ping", N }, pong = { "pong", N, ping };
+	partner( ping, pong );
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa pingpong.cfa" //
+// End: //
Index: doc/papers/concurrency/examples/Pingpong.py
===================================================================
--- doc/papers/concurrency/examples/Pingpong.py	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
+++ doc/papers/concurrency/examples/Pingpong.py	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
@@ -0,0 +1,33 @@
+def Scheduler
+try:
+	yield from ping();
+	yield from pong();
+except StopIteration:
+	print( "Scheduler stop" )
+
+
+def pong():
+	print( "pong" )
+for i in range( 10 ):
+
+		yield from ping()
+	print( "stop pong" )
+
+def ping():
+	global i
+	print( "ping" )
+	i += 1
+	if i < 5:
+		yield from pong()
+	print( "stop ping" )
+
+p = ping()
+try:
+	next( p )
+except StopIteration:
+	print( "stop" )
+
+# Local Variables: #
+# tab-width: 4 #
+# compile-command: "python3.5 pingpong.py" #
+# End: #
Index: doc/papers/concurrency/examples/Refactor.py
===================================================================
--- doc/papers/concurrency/examples/Refactor.py	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
+++ doc/papers/concurrency/examples/Refactor.py	(revision 17c6c1c38def3a07c82e33193f89279c6e5b5e63)
@@ -0,0 +1,29 @@
+def Recursion():
+	def Refactor():
+		N = (yield)
+		print( N );
+		if N == 0:
+			yield 0
+		r = Refactor()
+		next( r )
+		x = r.send( N - 1 )
+		print( x );
+		yield x
+
+	N = (yield)
+	print( N );
+	r = Refactor()
+	next( r )
+	print( r.send( N - 1 ) )
+
+c = Recursion()
+next( c )
+try:
+	c.send( 5 )
+except StopIteration:
+	print( "stop" )
+
+# Local Variables: #
+# tab-width: 4 #
+# compile-command: "python3.5 Refactor.py" #
+# End: #
