An ML like notation would be even more cool:<p><pre><code> char *str[10];
str : [10] (*char)
char *(*fp)( int, float *);
fp : *((int, *float) -> *char)
void (*signal(int, void (*fp)(int)))(int);
signal : (int, *(int -> void)) -> *(int -> void)
</code></pre>
(Oh. That last declaration did make some sense, after all…)<p>Really, how did they manage to chose such an inconsistent, unreadable syntax for their declarations? Is there any rational explanation?