型と集合の区別は要らないこともない。

Haskellを見て思った。集合と型はしばしば等しい。
Boolean型は[true, false]という集合に等しい。Integer型は[MinimumInteger,MinimumInteger+1,...,MaximumInteger-1,MaximumInteger]に等しい。実際には任意長の配列など、要素の数が有限個に収まらない*1型が多々あり、コンピュータで扱えるような列挙による集合だけでは不充分だ。

*1:少なくともメモリには収まらない。と思ったけど、32bit Integerさえ大概のPCでは収まらないな。