// "./cfa -g sum.c" // "./cfa -CFA sum.c > sum_out.c" // "gcc32 -g sum_out.c LibCfa/libcfa.a" extern "C" { int printf( const char *, ... ); } 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; } int main() { int a[10]; for ( int i = 0; i < 10; ++i ) { a[i] = i; } printf( "the sum is %d\n", sum( 10, a ) ); }