「型って何?」という疑問はかなり根本的で、専門家でも大議論になる。
前に型理論メーリングリストでも盛り上がった。
(http://www.cis.upenn.edu/~bcpierce/types/archives/current/msg00271.html)

で、以下は俺の理解。

古典的な意味での型は「値の集まり」。(値の「集合」って書かないのは、ちょっと理論的な理由。
無限に続くかもしれない計算を表すのに極限の概念が必要で、ただの集合じゃなくて、位相が入ってないといけないので。)
「int」は「整数の集まり」だし、MLとかの「string -> bool」は「文字列を受け取って論理値を返す関数の集まり」。

ただ、最近は型の概念も進化してて、それだけではくくれない。抽象型とか。
だから、現代的な意味での型は、「値に対して*どのような操作が可能か*を表す式」ってとこかと。
抽象型だったらインターフェースを経由した操作しかできないし、
(ちょっと専門的だけど)線形型だったら「一回しか使っちゃだめ」ってことを表す。

で、>>548でいってる「変数の型と、関数の値域の違い」ってのはよくわからないけど、
もし「変数の型」と「関数の値域の型」(t1 -> t2のt2)のことをいってるなら、
「型である」という点では別に違わない、ってのが俺の答えなんだが、どうよ。
そもそもたとえばMLの型tは、t ::= int | bool | t1 -> t2 | ...みたく
再帰的に定義されてて、任意の型が、関数の値域の型(t2)になりうるし。

長文&わかりにくくてスマソ