Consider the following typedefs :
typedef int (*f1)(float);
typedef f1 (*f2)(double);
typedef f2 (*f3)(int);
f2
is a function
Just don't. It can be done, but it will be very confusing. Typedef's are there to ease writing and reading this short of code.
A function f
that takes no arguments and returns a function pointer int (*)(float)
would probably be something like (untested):
int (*f())(float);
Then for the rest you just need to keep adding parenthesis until it looks like lisp.