// "./cfa quad.c"
// "./cfa -CFA quad.c > quad_out.c"
// "gcc31 -g quad_out.c LibCfa/libcfa.a"

extern "C" {
#include <stdio.h>
}

forall( type T | { T ?*?( T, T ); } )
T square( T t ) {
    return t * t;
}

forall( type U | { U square( U ); } )
U quad( U u ) {
    return square( square( u ) );
}

int main() {
    int N = 2;
    printf( "result of quad of %d is %d\n", N, quad( N ) );
}
