Index: src/examples/Makefile.in
===================================================================
--- src/examples/Makefile.in	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/Makefile.in	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -189,7 +189,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/examples/Makefile
+	  $(AUTOMAKE) --foreign src/examples/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/examples/abs.c
===================================================================
--- src/examples/abs.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/abs.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 18:26:16 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 09:32:04 2016
-// Update Count     : 44
+// Last Modified On : Wed Mar  2 15:07:26 2016
+// Update Count     : 51
 //
 
@@ -20,13 +20,13 @@
 	char ch = -65;
 	sout | "char\t\t\t"					| ch     | "\tabs " | abs( ch ) | endl;
-	sout | "signed int\t\t"				| -65    | "\tabs " | abs( -65 ) | endl;
-	sout | "signed long int\t\t" 		| -65l   | "\tabs " | abs( -65l ) | endl;
-	sout | "signed long long int\t"		| -65ll  | "\tabs " | abs( -65ll ) | endl;
-	sout | "float\t\t\t" 				| -65.0f | "\tabs " | abs( -65.0f ) | endl;
-	sout | "double\t\t\t"				| -65.0  | "\tabs " | abs( -65.0 ) | endl;
-	sout | "long double\t\t"			| -65.0l | "\tabs " | abs( -65.0l ) | endl;
-	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl;
-	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl;
-	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl;
+	sout | "signed int\t\t"				| -65    | "\tabs" | abs( -65 ) | endl;
+	sout | "signed long int\t\t" 		| -65l   | "\tabs" | abs( -65l ) | endl;
+	sout | "signed long long int\t"		| -65ll  | "\tabs" | abs( -65ll ) | endl;
+	sout | "float\t\t\t" 				| -65.0f | "\tabs" | abs( -65.0f ) | endl;
+	sout | "double\t\t\t"				| -65.0  | "\tabs" | abs( -65.0 ) | endl;
+	sout | "long double\t\t"			| -65.0l | "\tabs" | abs( -65.0l ) | endl;
+	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl;
+	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl;
+	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl;
 } // main
 
Index: src/examples/array.c
===================================================================
--- src/examples/array.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/array.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:10:13 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 18:13:52 2016
+// Update Count     : 3
 //
 
 #include "array.h"
 
-/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
+/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
 /// [ array_iterator begin, array_iterator end ]
 /// get_iterators( array_type array )
@@ -25,5 +25,5 @@
 
 // The first element is always at index 0.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type * begin( array_type array ) {
 	return &array[ 0 ];
@@ -31,5 +31,5 @@
 
 // The end iterator should point one past the last element.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type * end( array_type array ) {
 	return &array[ last( array ) ] + 1;
Index: src/examples/array.h
===================================================================
--- src/examples/array.h	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/array.h	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 26 17:09:29 2016
-// Update Count     : 3
+// Last Modified On : Wed Mar  2 18:13:35 2016
+// Update Count     : 5
 //
 
@@ -21,10 +21,10 @@
 // An array has contiguous elements accessible in any order using integer indicies. The first
 // element has index 0.
-context array( type array_type, type elt_type ) {
+trait array( otype array_type, otype elt_type ) {
 	lvalue elt_type ?[?]( array_type, int );
 };
 
 // A bounded array is an array that carries its maximum index with it.
-context bounded_array( type array_type, type elt_type | array( array_type, elt_type ) ) {
+trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) {
 	int last( array_type );
 };
@@ -34,5 +34,5 @@
 typedef int array_iterator;
 
-/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
+/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
 /// [ array_iterator begin, array_iterator end ] get_iterators( array_type );
 
@@ -40,8 +40,8 @@
 // A bounded array can be iterated over by using a pointer to the element type. These functions
 // return iterators corresponding to the first element and the one-past-the-end element, STL-style.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type *begin( array_type );
 
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type *end( array_type );
 
Index: src/examples/ato.c
===================================================================
--- src/examples/ato.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/ato.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -11,6 +11,6 @@
 // Created On       : Thu Feb  4 08:10:57 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 11:44:03 2016
-// Update Count     : 42
+// Last Modified On : Mon Feb 29 17:57:35 2016
+// Update Count     : 44
 // 
 
@@ -24,29 +24,29 @@
 int main( void ) {
 	int i = ato( "-123" );
-	sout | i | ' ' | "-123" | endl;
+	sout | i | "-123" | endl;
 	unsigned int ui = ato( "123" );
-	sout | ui | ' ' | "123" | endl;
+	sout | ui | "123" | endl;
 	long int li = ato( "-123" );
-	sout | li | ' ' | "-123" | endl;
+	sout | li | "-123" | endl;
 	unsigned long int uli = ato( "123" );
-	sout | uli | ' ' | "123" | endl;
+	sout | uli | "123" | endl;
 	long long int lli = ato( "-123" );
-	sout | lli | ' ' | "-123" | endl;
+	sout | lli | "-123" | endl;
 	unsigned long long int ulli = ato( "123" );
-	sout | ulli | ' ' | "123" | endl;
+	sout | ulli | "123" | endl;
 	float f = ato( "-123.456" );
-	sout | f | ' ' | "-123.456" | endl;
+	sout | f | "-123.456" | endl;
 	double d = ato( "-123.4567890123456" );
-	sout | d | ' ' | "-123.4567890123456" | endl;
+	sout | d | "-123.4567890123456" | endl;
 	long double ld = ato( "-123.45678901234567890123456789" );
-	sout | ld | ' ' | "-123.45678901234567890123456789" | endl;
+	sout | ld | "-123.45678901234567890123456789" | endl;
 	float _Complex fc = ato( "-123.456-123.456i" );
-	sout | fc | ' ' | "-123.456-123.456i" | endl;
+	sout | fc | "-123.456-123.456i" | endl;
 	double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" );
-	sout | dc | ' ' | "-123.4567890123456+123.4567890123456i" | endl;
+	sout | dc | "-123.4567890123456+123.4567890123456i" | endl;
 	long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" );
-	sout | ldc | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
+	sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
 	long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" );
-	sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
+	sout | ldc2 | "123.45678901234-123.4567890i" | endl;
 } // main
 
Index: src/examples/constants.c
===================================================================
--- src/examples/constants.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/constants.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 25 23:44:12 2016
-// Update Count     : 76
+// Last Modified On : Fri Mar 11 16:27:38 2016
+// Update Count     : 81
 //
 
@@ -44,5 +44,5 @@
 	0x_ff_FF_ff_FF_ff_FF_ff_FF;
 	9_223_372_036_854_775_807;
-	18_446_744_073_709_551_615;
+	18_446_744_073_709_551_615UL;
 	3.141_59f;
 	3.14159;
@@ -53,6 +53,6 @@
 	L'\x_ff_ee';
 	L_"\x_ff_ee";
-	L"a_b\r\Qyc\u_00_40  x_y_z\xff_AA";
-	L_"a_b\r\Qyc\u_00_40\
+	L"a_b\r\vyc\u_00_40  x_y_z\xff_AA";
+	L_"a_b\r\vyc\u_00_40\
   x_y_z\xff_AA";
 	"abc" "def" "ghi";
Index: src/examples/ctxts.c
===================================================================
--- src/examples/ctxts.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/ctxts.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,13 +10,13 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:11:19 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 18:10:21 2016
+// Update Count     : 3
 //
 
-context has_f( type T ) {
+trait has_f( type T ) {
 	T f( T );
 };
 
-context has_g( type U | has_f( U ) ) {
+trait has_g( type U | has_f( U ) ) {
 	U g( U );
 };
Index: src/examples/fstream_test.c
===================================================================
--- src/examples/fstream_test.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/fstream_test.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 11:45:43 2016
-// Update Count     : 43
+// Last Modified On : Sun Mar  6 20:58:29 2016
+// Update Count     : 54
 //
 
@@ -18,18 +18,15 @@
 int main( void ) {
 	int nombre;
-	sout | "Entrez un nombre, s'il vous plaît:\n";
+	sout | "Entrez un nombre, s'il vous plaît:" | endl;
 	sin  | &nombre;
-	sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl;
-	sout | "nombre " | nombre | " est "
-		 | (nombre > 0 ? "plus grand que" :
-		   nombre == 0 ? "égal à" : "moins de")
-		 | " zéro" | endl;
+	sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl;
+	sout | "nombre" | nombre | "est"
+		 | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de")
+		 | "zéro" | endl;
 
-	sout | "Entrez trois nombres, s'il vous plaît:\n";
+	sout | "Entrez trois nombres, s'il vous plaît: " | endl;
 	int i, j, k;
 	sin  | &i | &j | &k;
-	sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl;
-
-	sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl;
+	sout | "Vous avez entré" | "i:" | "" | i | "j:" | "" | j | "k:" | "" | k | endl;
 }
 
Index: src/examples/hello.c
===================================================================
--- src/examples/hello.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/hello.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:11:45 2016
-// Update Count     : 8
+// Last Modified On : Mon Feb 29 18:06:17 2016
+// Update Count     : 10
 //
 
@@ -17,5 +17,5 @@
 
 int main() {
-	sout | "Bonjour au monde!\n";
+	sout | "Bonjour au monde!" | endl;
 }
 
Index: src/examples/huge.c
===================================================================
--- src/examples/huge.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/huge.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,9 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:15:34 2015
-// Update Count     : 1
+// Last Modified On : Tue Mar  8 22:16:32 2016
+// Update Count     : 2
 //
 
-int huge( int n, forall( type T ) T (*f)( T ) ) {
+int huge( int n, forall( otype T ) T (*f)( T ) ) {
 	if ( n <= 0 )
 		return f( 0 );
Index: src/examples/identity.c
===================================================================
--- src/examples/identity.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/identity.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:17:32 2016
-// Update Count     : 10
+// Last Modified On : Tue Mar  8 22:15:08 2016
+// Update Count     : 13
 //
 
 #include <fstream>
 
-forall( type T )
+forall( otype T )
 T identity( T t ) {
 	return t;
Index: src/examples/includes.c
===================================================================
--- src/examples/includes.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/includes.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Dec 21 13:54:09 2015
-// Update Count     : 322
+// Last Modified On : Wed Mar  2 23:28:02 2016
+// Update Count     : 328
 //
 
@@ -43,6 +43,6 @@
 #include <ctype.h>
 #include <curses.h>
-#include <demangle.h>		// enum / contains "type"
-#include <dialog.h>			// enum / contains "type"
+#include <demangle.h>
+#include <dialog.h>
 #include <dirent.h>
 #include <dis-asm.h>
@@ -56,14 +56,16 @@
 #include <err.h>
 #include <errno.h>
+#if 0
 #include <error.h>
+#endif
+#include <eti.h>
+#include <evdns.h>
+#include <event.h>
+#include <evhttp.h>
 #if 0
-#include <eti.h>
-#include <evdns.h>			// subdirectory event2 contains "type"
-#include <event.h>
-#include <evhttp.h>			// enum / subdirectory event2 contains "type"
 #include <evrpc.h>
 #include <evutil.h>
 #include <execinfo.h>
-#include <expat.h>			// enum / contains "type" and "context"
+#include <expat.h>
 #include <expat_config.h>
 #include <expat_external.h>
@@ -74,5 +76,5 @@
 #include <fmtmsg.h>
 #include <fnmatch.h>
-#include <form.h>			// contains "type"
+#include <form.h>
 #include <fpu_control.h>
 #include <fstab.h>
@@ -81,5 +83,5 @@
 #include <ftw.h>
 #include <gconv.h>
-//#include <gcrypt.h>		// enum / contains "type"
+//#include <gcrypt.h>
 //#include <gcrypt-module.h>
 #include <getopt.h>
@@ -107,5 +109,5 @@
 #include <limits.h>
 #include <locale.h>
-#include <math.h>			// contains "type"
+#include <math.h>
 #include <ncurses.h>
 #include <setjmp.h>
Index: src/examples/index.h
===================================================================
--- src/examples/index.h	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/index.h	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,9 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:17:31 2015
-// Update Count     : 1
+// Last Modified On : Wed Mar  2 18:10:46 2016
+// Update Count     : 2
 //
 
-context index( type T ) {
+trait index( type T ) {
 	T ?+?( T, T );
 	T ?-?( T, T );
Index: src/examples/io.c
===================================================================
--- src/examples/io.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/io.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -0,0 +1,66 @@
+//                               -*- Mode: C -*- 
+// 
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// io.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Mar  2 16:56:02 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Apr  6 14:58:27 2016
+// Update Count     : 15
+// 
+
+#include <fstream>
+
+int main() {
+	char c;														// basic types
+	short int si;
+	unsigned short int usi;
+	int i;
+	unsigned int ui;
+	long int li;
+	unsigned long int uli;
+	long long int lli;
+	unsigned long long int ulli;
+	float f;
+	double d;
+	long double ld;
+	float _Complex fc;
+	double _Complex dc;
+	long double _Complex ldc;
+	char s1[10], s2[10];
+
+	ifstream in;												// create / open file
+	open( &in, "input.data", "r" );
+
+	&in | &c													// character
+		| &si | &usi | &i | &ui | &li | &uli | &lli | &ulli		// integral
+		| &f | &d | &ld											// floating point
+		| &fc | &dc | &ldc										// floating-point complex
+		| cstr( s1 ) | cstr( s2, 10 );							// C string, length unchecked and checked
+
+	sout | c | ' ' | endl										// character
+		 | si | usi | i | ui | li | uli | lli | ulli | endl		// integral
+		 | f | d | ld | endl									// floating point
+		 | fc | dc | ldc | endl;								// complex
+	sout | endl;
+	sout | f | "" | d | "" | ld | endl							// floating point without separator
+		 | sepDisable | fc | dc | ldc | sepEnable | endl		// complex without separator
+		 | sepOn | s1 | sepOff | s2 | endl						// local separator removal
+		 | s1 | "" | s2 | endl;									// C string withou separator
+	sout | endl;
+
+	sepSet( sout, ", $" );										// change separator, maximum of 15 characters
+	sout | f | d | ld | endl									// floating point without separator
+		 | fc | dc | ldc | endl									// complex without separator
+		 | s1 | s2 | endl;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa io.c" //
+// End: //
Index: src/examples/io.data
===================================================================
--- src/examples/io.data	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/io.data	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -0,0 +1,1 @@
+A 1 2 3 4 5 6 7 8 1.1 1.2 1.3 1.1+2.3 1.1-2.3 1.1-2.3 abc xyz
Index: src/examples/it_out.c
===================================================================
--- src/examples/it_out.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/it_out.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,16 +10,16 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:41:23 2015
-// Update Count     : 4
+// Last Modified On : Tue Mar  8 22:14:39 2016
+// Update Count     : 8
 //
 
 typedef unsigned long streamsize_type;
 
-context ostream( dtype os_type ) {
+trait ostream( dtype os_type ) {
 	os_type *write( os_type *, const char *, streamsize_type );
 	int fail( os_type * );
 };
 
-context writeable( type T ) {
+trait writeable( otype T ) {
 	forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T );
 };
@@ -29,5 +29,5 @@
 forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * );
 
-context istream( dtype is_type ) {
+trait istream( dtype is_type ) {
 	is_type *read( is_type *, char *, streamsize_type );
 	is_type *unread( is_type *, char );
@@ -36,5 +36,5 @@
 };
 
-context readable( type T ) {
+trait readable( otype T ) {
 	forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T );
 };
@@ -43,5 +43,5 @@
 forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* );
 
-context iterator( type iterator_type, type elt_type ) {
+trait iterator( otype iterator_type, otype elt_type ) {
 	iterator_type ?++( iterator_type* );
 	iterator_type ++?( iterator_type* );
@@ -52,11 +52,11 @@
 };
 
-forall( type elt_type | writeable( elt_type ),
-		type iterator_type | iterator( iterator_type, elt_type ),
+forall( otype elt_type | writeable( elt_type ),
+		otype iterator_type | iterator( iterator_type, elt_type ),
 		dtype os_type | ostream( os_type ) )
 void write_all( iterator_type begin, iterator_type end, os_type *os );
 
-forall( type elt_type | writeable( elt_type ),
-		type iterator_type | iterator( iterator_type, elt_type ),
+forall( otype elt_type | writeable( elt_type ),
+		otype iterator_type | iterator( iterator_type, elt_type ),
 		dtype os_type | ostream( os_type ) )
 void write_all( elt_type begin, iterator_type end, os_type *os ) {
Index: src/examples/limits.c
===================================================================
--- src/examples/limits.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/limits.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -98,4 +98,4 @@
 // Local Variables: //
 // tab-width: 4 //
-// compile-command: "cfa min.c" //
+// compile-command: "cfa limits.c" //
 // End: //
Index: src/examples/minmax.c
===================================================================
--- src/examples/minmax.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/minmax.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:17:53 2016
-// Update Count     : 47
+// Last Modified On : Mon Feb 29 23:45:16 2016
+// Update Count     : 49
 //
 
@@ -23,26 +23,26 @@
 
 	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | ' ' | 3 | "\tmin " | min( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | ' ' | 3u | "\tmin " | min( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | ' ' | 3l | "\tmin " | min( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | ' ' | 3ul | "\tmin " | min( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | ' ' | 3ll | "\tmin " | min( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | ' ' | 3ull | "\tmin " | min( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | ' ' | 3.1f | "\tmin " | min( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | ' ' | 3.1 | "\tmin " | min( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | ' ' | 3.1l | "\tmin " | min( 4.0l, 3.1l ) | endl;
+	sout | "signed int\t\t"				| 4 | 3 | "\tmin" | min( 4, 3 ) | endl;
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;
 
 	sout | endl;
 
 	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | ' ' | 3 | "\tmax " | max( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | ' ' | 3u | "\tmax " | max( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | ' ' | 3l | "\tmax " | max( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | ' ' | 3ul | "\tmax " | max( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | ' ' | 3ll | "\tmax " | max( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | ' ' | 3ull | "\tmax " | max( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | ' ' | 3.1f | "\tmax " | max( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | ' ' | 3.1 | "\tmax " | max( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | ' ' | 3.1l | "\tmax " | max( 4.0l, 3.1l ) | endl;
+	sout | "signed int\t\t"				| 4 | 3 | "\tmax" | max( 4, 3 ) | endl;
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;
 } // main
 
Index: src/examples/new.c
===================================================================
--- src/examples/new.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/new.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,9 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 25 23:33:55 2016
-// Update Count     : 2
+// Last Modified On : Tue Mar  8 22:13:20 2016
+// Update Count     : 4
 //
 
-forall( type T )
+forall( otype T )
 void f( T *t ) {
 	t--;
Index: src/examples/prolog.c
===================================================================
--- src/examples/prolog.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/prolog.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,13 +10,13 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:25:52 2015
-// Update Count     : 1
+// Last Modified On : Tue Mar  8 22:09:39 2016
+// Update Count     : 5
 //
 
-extern "C" { extern int printf( const char *fmt, ... ); }
+#include <fstream>
 
-void printResult( int x ) { printf( "int\n" ); }
-void printResult( double x ) { printf( "double\n" ); }
-void printResult( char * x ) { printf( "char*\n" ); }
+void printResult( int x ) { sout | "int" | endl; }
+void printResult( double x ) { sout | "double" | endl; }
+void printResult( char * x ) { sout | "char*" | endl; }
 
 void is_arithmetic( int x ) {}
@@ -25,13 +25,13 @@
 void is_integer( int x ) {}
 
-context ArithmeticType( type T ) {
+trait ArithmeticType( otype T ) {
 	void is_arithmetic( T );
 };
 
-context IntegralType( type T | ArithmeticType( T ) ) {
+trait IntegralType( otype T | ArithmeticType( T ) ) {
 	void is_integer( T );
 };
 
-forall( type T | IntegralType( T ) | { void printResult( T ); } )
+forall( otype T | IntegralType( T ) | { void printResult( T ); } )
 void hornclause( T param ) {
 	printResult( param );
Index: src/examples/quad.c
===================================================================
--- src/examples/quad.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/quad.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,16 +10,16 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:19:24 2016
-// Update Count     : 6
+// Last Modified On : Tue Mar  8 22:07:02 2016
+// Update Count     : 8
 //
 
 #include <fstream>
 
-forall( type T | { T ?*?( T, T ); } )
+forall( otype T | { T ?*?( T, T ); } )
 T square( T t ) {
 	return t * t;
 }
 
-forall( type U | { U square( U ); } )
+forall( otype U | { U square( U ); } )
 U quad( U u ) {
 	return square( square( u ) );
@@ -28,5 +28,5 @@
 int main() {
 	int N = 2;
-	sout | "result of quad of " | N | " is " | quad( N ) | endl;
+	sout | "result of quad of" | N | "is" | quad( N ) | endl;
 }
 
Index: src/examples/random.c
===================================================================
--- src/examples/random.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/random.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -7,26 +7,26 @@
 
 int main() {
-	randseed( getpid() );								// set random seed
+	rand48seed( getpid() );								// set random seed
 
 	// test polymorphic calls to random and stream
-	char c = random();
+	char c = rand48();
 	sout | c | endl;
-	int i = random();
+	int i = rand48();
     sout | i | endl;
-	unsigned int ui = random();
+	unsigned int ui = rand48();
     sout | ui | endl;
-	long int li = random();
+	long int li = rand48();
     sout | li | endl;
-	unsigned long int uli = random();
+	unsigned long int uli = rand48();
     sout | uli | endl;
-    float f = random();
+    float f = rand48();
     sout | f | endl;
-    double d = random();
+    double d = rand48();
     sout | d | endl;
-    float _Complex fc = random();
+    float _Complex fc = rand48();
     sout | fc | endl;
-    double _Complex dc = random();
+    double _Complex dc = rand48();
     sout | dc | endl;
-    long double _Complex ldc = random();
+    long double _Complex ldc = rand48();
     sout | ldc | endl;
 } // main
Index: src/examples/rational.c
===================================================================
--- src/examples/rational.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/rational.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -0,0 +1,93 @@
+//                               -*- Mode: C -*- 
+// 
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// rational.c -- test rational number package
+// 
+// Author           : Peter A. Buhr
+// Created On       : Mon Mar 28 08:43:12 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Apr  8 11:27:48 2016
+// Update Count     : 21
+// 
+
+#include <limits>
+#include <rational>
+#include <fstream>
+
+int main() {
+	Rational a, b, c;
+	sout | "constructor" | endl;
+	a = rational( 3 );
+	b = rational( 4 );
+	c = rational();
+	sout | a | b | c | endl;
+	a = rational( 4, 8 );
+	b = rational( 5, 7 );
+	sout | a | b | endl;
+	a = rational( -2, -3 );
+	b = rational( 3, -2 );
+	sout | a | b | endl;
+	a = rational( -2, 3 );
+	b = rational( 3, 2 );
+	sout | a | b | endl;
+
+	sout | "logical" | endl;
+	a = rational( -2 );
+	b = rational( -3, 2 );
+	sout | a | b | endl;
+	sout | a == 1 | endl;
+	sout | a != b | endl;
+	sout | a <  b | endl;
+	sout | a <= b | endl;
+	sout | a >  b | endl;
+	sout | a >= b | endl;
+
+	sout | "arithmetic" | endl;
+	sout | a | b | endl;
+	sout | a + b | endl;
+	sout | a - b | endl;
+	sout | a * b | endl;
+	sout | a / b | endl;
+
+	sout | "conversion" | endl;
+	a = rational( 3, 4 );
+	sout | widen( a ) | endl;
+	a = rational( 1, 7 );
+	sout | widen( a ) | endl;
+	a = rational( 355, 113 );
+	sout | widen( a ) | endl;
+	sout | narrow( 0.75, 4 ) | endl;
+	sout | narrow( 0.14285714285714, 16 ) | endl;
+	sout | narrow( 3.14159265358979, 256 ) | endl;
+
+	Rational x, y;
+	x = rational( 1, 2 );
+	y = rational( 2 );
+	sout | x - y | endl;
+	sout | x > y | endl;
+	sout | x | numerator( x, 2 ) | x | endl;
+	sout | y | denominator( y, -2 ) | y | endl;
+
+	Rational z;
+	z = rational( 0, 5 );
+	sout | z | endl;
+
+	sout | x | numerator( x, 0 ) | x | endl;
+
+	x = rational( 1, MAX ) + rational( 1, MAX );
+	sout | x | endl;
+	x = rational( 3, MAX ) + rational( 2, MAX );
+	sout | x | endl;
+
+	sin | &a | &b;
+	sout | a | b | endl;
+} // main
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa rational.c" //
+// End: //
Index: src/examples/rational.cc
===================================================================
--- src/examples/rational.cc	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
+++ src/examples/rational.cc	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -0,0 +1,198 @@
+#include "rationalnumber.h"
+
+#include <iostream>
+#include <cstdlib>					// exit
+using namespace std;
+
+static struct {
+    int gcd, con, copy, des, assn, rel, add, sub, mul, div, in, out;
+} stats;						// implicitly initialized to 0
+
+static int gcd( int a, int b ) {
+    for ( ;; ) {
+	int r = a % b;
+      if ( r == 0 ) break;
+	a = b;
+	b = r;
+    } // for
+    stats.gcd += 1;
+    return b;
+} // gcd
+
+void Rationalnumber::statistics() {
+    cerr
+	<< "gcd:"  << stats.gcd  << '\t'
+	<< "con:"  << stats.con  << '\t'
+	<< "copy:" << stats.copy << '\t'
+	<< "des:"  << stats.des  << '\t'
+	<< "assn:" << stats.assn << '\t'
+	<< "rel:"  << stats.rel  << '\t'
+	<< "add:"  << stats.add  << '\t'
+	<< "sub:"  << stats.sub  << '\t'
+	<< "mul:"  << stats.mul  << '\t'
+	<< "div:"  << stats.div  << '\t'
+	<< "in:"   << stats.in   << '\t'
+	<< "out:"  << stats.out
+	<< endl;
+} // Rationalnumber::statistics
+
+bool Rationalnumber::eq( Rationalnumber &r ) {
+    return num * r.denom == denom * r.num;
+} // Rationalnumber::Rationalnumber::eq
+
+bool Rationalnumber::lt( Rationalnumber &r ) {
+    //int temp1 = denom * r.denom, temp2 = num * r.denom, temp3 = denom * r.num;
+    //return temp1 > 0 && temp2 < temp3 || temp1 < 0 && temp2 > temp3;
+    // if denominator is always > 0, only this check is necessary
+    return num * r.denom < denom * r.num;
+} // Rationalnumber::Rationalnumber::lt
+
+void Rationalnumber::common1( int n, int d ) {
+    num = n;
+    denom = d;
+    stats.con += 1;
+} // Rationalnumber::common1
+
+int Rationalnumber::common2( int &n, int &d ) {
+    if ( d == 0 ) {
+	cerr << "Invalid rational number construction: denominator cannot be equal to 0." << endl;
+	exit( EXIT_FAILURE );
+    } // exit
+    if ( d < 0 ) { d = -d; n = -n; }			// move sign to numerator
+    return gcd( abs( n ), d );				// simplify
+} // Rationalnumber::common2
+
+Rationalnumber::Rationalnumber() {
+    common1( 0, 1 );
+} // Rationalnumber::Rationalnumber
+
+Rationalnumber::Rationalnumber( int n ) {
+    common1( n, 1 );
+} // Rationalnumber::Rationalnumber
+
+Rationalnumber::Rationalnumber( int n, int d ) {
+    int temp = common2( n, d );
+    common1( n / temp, d / temp );
+} // Rationalnumber::Rationalnumber
+
+Rationalnumber::Rationalnumber( const Rationalnumber &c ) {
+    num = c.num;
+    denom = c.denom;
+    stats.copy += 1;
+} // Rationalnumber::Rationalnumber
+
+Rationalnumber::~Rationalnumber() {
+    stats.des += 1;
+} // Rationalnumber::~Rationalnumber
+
+Rationalnumber &Rationalnumber::operator=( const Rationalnumber &r ) {
+    num = r.num;
+    denom = r.denom;
+    stats.assn += 1;
+    return *this;
+} // Rationalnumber::operator=
+
+int Rationalnumber::numerator() const {
+    return num;
+} // Rationalnumber::numerator
+
+int Rationalnumber::numerator( int n ) {
+    int prev = num;
+    int temp = gcd( abs( n ), denom );			// simplify
+    num = n / temp;
+    denom = denom / temp;
+    return prev;
+} // Rationalnumber::numerator
+		   
+int Rationalnumber::denominator() const {
+    return denom;
+} // Rationalnumber::denominator
+
+int Rationalnumber::denominator( int d ) {
+    int prev = denom;
+    int temp = common2( num, d );
+    num = num / temp;
+    denom = d / temp;
+    return prev;
+} // Rationalnumber::denominator
+
+bool operator==( Rationalnumber l, Rationalnumber r ) {
+    stats.rel += 1;
+    return l.eq( r );
+} // operator==
+
+bool operator!=( Rationalnumber l, Rationalnumber r ) {
+    stats.rel += 1;
+    return ! ( l.eq( r ) );
+} // operator!=
+
+bool operator<( Rationalnumber l, Rationalnumber r ) {
+    stats.rel += 1;
+    return l.lt( r );
+} // operator<
+
+bool operator<=( Rationalnumber l, Rationalnumber r ) {
+    stats.rel += 1;
+    return l.lt( r ) || l.eq( r );
+} // operator<=
+
+bool operator>( Rationalnumber l, Rationalnumber r ) {
+    stats.rel += 1;
+    return ! ( l.lt( r ) || l.eq( r ) );
+} // operator>
+
+bool operator>=( Rationalnumber l, Rationalnumber r ) {
+    stats.rel += 1;
+    return ! ( l.lt( r ) );
+} // operator>=
+
+Rationalnumber Rationalnumber::operator-() {
+    return Rationalnumber( -num, denom );
+} // Rationalnumber::operator-
+
+Rationalnumber operator+( Rationalnumber l, Rationalnumber r ) {
+    stats.add += 1;
+    if ( l.denom == r.denom ) {				// special case
+	return Rationalnumber( l.num + r.num, l.denom );
+    } else {
+	return Rationalnumber( l.num * r.denom + l.denom * r.num, l.denom * r.denom );
+    } // if
+} // operator+
+
+Rationalnumber operator-( Rationalnumber l, Rationalnumber r ) {
+    stats.sub += 1;
+    if ( l.denom == r.denom ) {				// special case
+	return Rationalnumber( l.num - r.num, l.denom );
+    } else {
+	return Rationalnumber( l.num * r.denom - l.denom * r.num, l.denom * r.denom );
+    } // if
+} // operator-
+
+Rationalnumber operator*( Rationalnumber l, Rationalnumber r ) {
+    stats.mul += 1;
+    return Rationalnumber( l.num * r.num, l.denom * r.denom );
+} // operator*
+
+Rationalnumber operator/( Rationalnumber l, Rationalnumber r ) {
+    stats.div += 1;
+    if ( r.num < 0 ) { r.num = -r.num; r.denom = -r.denom; }
+    return Rationalnumber( l.num * r.denom, l.denom * r.num );
+} // operator/
+
+istream &operator>>( istream &is, Rationalnumber &r ) {
+    stats.in += 1;
+    is >> r.num >> r.denom;
+    int temp = Rationalnumber::common2( r.num, r.denom );
+    r.num /= temp;
+    r.denom /= temp;
+    return is;
+} // operator>>
+
+ostream &operator<<( ostream &os, Rationalnumber r ) {
+    stats.out += 1;
+    return os << r.num << "/" << r.denom;
+} // operator<<
+
+// Local Variables: //
+// compile-command: "make rationalnumber" //
+// End: //
Index: src/examples/searchsort.c
===================================================================
--- src/examples/searchsort.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/searchsort.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -11,6 +11,6 @@
 // Created On       : Thu Feb  4 18:17:50 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:21:04 2016
-// Update Count     : 46
+// Last Modified On : Tue Mar 22 22:16:46 2016
+// Update Count     : 55
 // 
 
@@ -36,4 +36,24 @@
 		sout | *v | ", ";
 	} // for
+	sout | endl | endl;
+
+	// descending sort/search by changing < to >
+	for ( unsigned int i = 0; i < size; i += 1 ) {
+		iarr[i] = i + 1;
+		sout | iarr[i] | ", ";
+	} // for
+	sout | endl;
+	{
+		int ?<?( int x, int y ) { return x > y; }
+		qsort( iarr, size );
+		for ( unsigned int i = 0; i < size; i += 1 ) {
+			sout | iarr[i] | ", ";
+		} // for
+		sout | endl;
+		for ( unsigned int i = 0; i < size; i += 1 ) {
+			int *v = bsearch( size - i, iarr, size );
+			sout | *v | ", ";
+		} // for
+	}
 	sout | endl | endl;
 
Index: src/examples/simplePoly.c
===================================================================
--- src/examples/simplePoly.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/simplePoly.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,9 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:31:17 2015
-// Update Count     : 2
+// Last Modified On : Tue Mar  8 22:06:41 2016
+// Update Count     : 3
 //
 
-forall( type T, type U | { T f( T, U ); } )
+forall( otype T, otype U | { T f( T, U ); } )
 T q( T t, U u ) {
 	return f( t, u );
Index: src/examples/simpler.c
===================================================================
--- src/examples/simpler.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/simpler.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,9 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:31:48 2015
-// Update Count     : 1
+// Last Modified On : Tue Mar  8 22:06:30 2016
+// Update Count     : 2
 //
 
-forall( type T ) T id( T, T );
+forall( otype T ) T id( T, T );
 
 int main() {
Index: src/examples/specialize.c
===================================================================
--- src/examples/specialize.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/specialize.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:32:26 2015
-// Update Count     : 2
+// Last Modified On : Tue Mar  8 22:06:17 2016
+// Update Count     : 3
 //
 
@@ -39,5 +39,5 @@
 }
 
-forall( type T ) T f( T t )
+forall( otype T ) T f( T t )
 {
 	printf( "in f; sizeof T is %d\n", sizeof( T ) );
Index: src/examples/square.c
===================================================================
--- src/examples/square.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/square.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:21:58 2016
-// Update Count     : 26
+// Last Modified On : Tue Mar  8 22:05:48 2016
+// Update Count     : 27
 //
 
 #include <fstream>
 
-forall( type T | { T ?*?( T, T ); } )
+forall( otype T | { T ?*?( T, T ); } )
 T square( T t ) {
 	return t * t;
Index: src/examples/sum.c
===================================================================
--- src/examples/sum.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/sum.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb 16 23:49:31 2016
-// Update Count     : 189
+// Last Modified On : Fri Mar  4 15:06:47 2016
+// Update Count     : 196
 //
 
 #include <fstream>
 
-context sumable( type T ) {
+trait sumable( otype T ) {
 	const T 0;
 	T ?+?( T, T );
@@ -24,5 +24,5 @@
 }; // sumable
 
-forall( type T | sumable( T ) )
+forall( otype T | sumable( T ) )
 T sum( unsigned int n, T a[] ) {
 	T total = 0;										// instantiate T, select 0
@@ -47,6 +47,6 @@
 		a[i] = v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | (int)sum( size, a ) | ", check " | (int)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | (int)sum( size, a ) | "" | ", check" | (int)s | endl;
 
 	int s = 0, a[size], v = low;
@@ -55,6 +55,6 @@
 		a[i] = (int)v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | sum( size, (int *)a ) | ", check " | (int)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | sum( size, (int *)a ) | "" | ", check" | (int)s | endl;
 
 	float s = 0.0, a[size], v = low / 10.0;
@@ -63,6 +63,6 @@
 		a[i] = (float)v;
 	} // for
-	sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
-		 | sum( size, (float *)a ) | ", check " | (float)s | endl;
+	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
+		 | sum( size, (float *)a ) | "" | ", check" | (float)s | endl;
 
 	double s = 0, a[size], v = low / 10.0;
@@ -71,6 +71,6 @@
 		a[i] = (double)v;
 	} // for
-	sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
-		 | sum( size, (double *)a ) | ", check " | (double)s | endl;
+	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
+		 | sum( size, (double *)a ) | "" | ", check" | (double)s | endl;
 
 	struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 };
@@ -79,5 +79,5 @@
 	S ++?( S *t ) { *t += 1; return *t; }
 	S ?++( S *t ) { S temp = *t; *t += 1; return temp; }
-	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' | v.j; }
+	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
 
 	S s = 0, a[size], v = { low, low };
@@ -86,6 +86,6 @@
 		a[i] = (S)v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | sum( size, (S *)a ) | ", check " | (S)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | sum( size, (S *)a ) | "" | ", check" | (S)s | endl;
 } // main
 
Index: src/examples/swap.c
===================================================================
--- src/examples/swap.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/swap.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:22:12 2016
-// Update Count     : 64
+// Last Modified On : Wed Mar  2 16:15:11 2016
+// Update Count     : 65
 //
 
@@ -54,15 +54,15 @@
 
 	float f1 = 1.5, f2 = 2.5;
-	sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t\tswap ";
+	sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap ";
 	swap( &f1, &f2 );
 	sout | '\t' | f1 | ' ' | f2 | endl;
 
 	double d1 = 1.5, d2 = 2.5;
-	sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t\tswap ";
+	sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap ";
 	swap( &d1, &d2 );
 	sout | '\t' | d1 | ' ' | d2 | endl;
 
 	long double ld1 = 1.5, ld2 = 2.5;
-	sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t\tswap ";
+	sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap ";
 	swap( &ld1, &ld2 );
 	sout | '\t' | ld1 | ' ' | ld2 | endl;
Index: src/examples/tests/vector_test.out.txt
===================================================================
--- src/examples/tests/vector_test.out.txt	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/tests/vector_test.out.txt	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -1,5 +1,5 @@
 enter N elements and C-d on a separate line:
 Array elements:
-1 2 3 4 5 
+1 2 3 4 5
 Array elements reversed:
-5 4 3 2 1 
+5 4 3 2 1
Index: src/examples/twice.c
===================================================================
--- src/examples/twice.c	(revision c5833e8112dc702a276c3752677503416c1c0b38)
+++ src/examples/twice.c	(revision 0f9e4403ea9f501a7993ba07c5badb03d4c58742)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:23:25 2016
-// Update Count     : 13
+// Last Modified On : Tue Mar  8 22:04:58 2016
+// Update Count     : 16
 //
 
 #include <fstream>
 
-forall( type T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )
+forall( otype T | { T ?+?( T, T ); T ?++( T * ); [T] ?+=?( T *, T ); } )
 T twice( const T t ) {
 	return t + t;
@@ -27,5 +27,5 @@
 	char ?++( char *op ) { char temp = *op; *op += 1; return temp; }
 
-	sout | twice( 'a' ) | ' ' | twice( 1 ) | ' ' | twice( 3.2 ) | endl;
+	sout | twice( 'a' ) | ' ' | twice( 1 ) | twice( 3.2 ) | endl;
 }
 
