// "./cfa forall.c" typedef forall ( type T ) int (*f)( int ); forall( type T ) void swap( T left, T right ) { T temp = left; left = right; right = temp; } context sumable( type T ) { const T 0; T ?+?(T, T); T ?++(T*); [T] ?+=?(T*,T); }; forall( type T | sumable( T ) ) T sum( int n, T a[] ) { T total = 0; int i; for ( i = 0; i < n; i += 1 ) total = total + a[i]; return total; } forall( type T | { T ?+?(T, T); T ?++(T*); [T] ?+=?(T*,T); } ) T twice( T t ) { return t + t; } forall( type T | { const T 0; int ?!=?(T, T); int ?