型宣言と型式

C言語はこの考え方のせいでだいぶ損してるように思うんだけど僕だけでしょうか。

C言語の文法「宣言は置換規則」 - 簡潔なQ

最初、「宣言は置換規則」というのがどういう意味か分からず、理解するのにだいぶ時間がかかってしまった。
要は、C言語の型宣言は「aryがint[10]型」「funcがchar(int,double)型」「ptrがchar*型」ではなくて「ary[10]がint型」「func(int,double)がchar型」「*ptrがchar型」という書き方なので分かりづらい、という話だ。(「置換規則」と言っているのはこういう意味だよね?)
確かにC言語の型は見づらい。「宣言は置換規則」というより、C言語が出来た当時は型式(「けいしき」じゃなくて型の式)という考えが無かったのかもしれない。D言語ではqnighyが書いたような、より分かりやすい書き方になっている。
Haskellでは「Int型のリスト」型の型式は[Int]と書き、「リスト型とInt型を引数に取り、Int型のリストを返す関数」型では[a] -> Int -> [Int]のようになっていて分かりやすい。