Index: src/examples/coroutine.c
===================================================================
--- src/examples/coroutine.c	(revision c15b80570fa557958b480a71e35c95a291e0d78c)
+++ src/examples/coroutine.c	(revision c15b80570fa557958b480a71e35c95a291e0d78c)
@@ -0,0 +1,46 @@
+#include <fstream>
+#include "../libcfa/kernel/kernel.h"
+
+struct Fibonacci {
+      coroutine c;
+      int fn; // used for communication
+};
+
+void ?{}(Fibonacci* this) {
+      this->fn = 0;
+}
+
+coroutine* this_coroutine(Fibonacci* this) {
+
+}
+
+void co_main(Fibonacci* this) {
+      int fn1, fn2; 		// retained between resumes
+      this->fn = 0;
+      fn1 = this->fn;
+      suspend(this); 		// return to last resume
+
+      this->fn = 1;
+      fn2 = fn1;
+      fn1 = this->fn;
+      suspend(this); 		// return to last resume
+
+      for ( ;; ) {
+            this->fn = fn1 + fn2;
+            fn2 = fn1;
+            fn1 = this->fn;
+            suspend(this); 	// return to last resume
+      }
+}
+
+int next(Fibonacci* this) {
+      resume(this); // transfer to last suspend
+      return this->fn;
+}
+
+void main() {
+      Fibonacci f1, f2;
+      for ( int i = 1; i <= 10; i += 1 ) {
+            sout | next(&f1) | ' ' | next(&f2) | endl;
+      }
+}
Index: src/libcfa/kernel/kernel.h
===================================================================
--- src/libcfa/kernel/kernel.h	(revision c15b80570fa557958b480a71e35c95a291e0d78c)
+++ src/libcfa/kernel/kernel.h	(revision c15b80570fa557958b480a71e35c95a291e0d78c)
@@ -0,0 +1,19 @@
+#pragma once
+
+struct coroutine {
+      int blarg;
+};
+
+trait coroutine_t(dtype T) {
+      coroutine* this_coroutine(T* this);
+};
+
+forall(dtype T | coroutine_t(T))
+void suspend(T* cor) {
+      
+}
+
+forall(dtype T | coroutine_t(T))
+void resume(T* cor) {
+
+}
