型宣言はどうして必要なのか?

正直奥が深すぎて理解しきれていないけど、とりあえず分かっている事を書きます
突っ込みどころがあったら指摘ヨロシクです★
『型』とは何か?
Q. 型を割り当てること(「型付け」)によってビットの集まりに意味が与えられる
型は通例、メモリ中の値と変数の両方と関連する。コンピュータではすべての値は単なるビットの集まりなので、ハードウェアはメモリアドレスやオペコード、cher、整数、浮動小数点数などの基本的なデータの間でさえ何の区別も行わない
型はプログラムとプログラマにそれらのビット列をどのように扱うべきかの情報を与える
Q. なぜ『型』を『宣言』する必要があるのか?
1. 型の使用によってコンパイラが無意味な、または不正であろうコードを検出することが可能になる
2. 表現力の高い型システムでは型はプログラマの意図を説明することができるので、ドキュメントの役割を果たすこともある
3. 抽象化(いまいちよく分からない・・・)のために必要
そして、どうして静的=コンパイル時にという意味なのかも同時に理解
4. 静的な型検査によってコンパイラは最適化に有用な情報を得ることがある
型による制限を検証し、実施する処理は型検査と呼ばれ、コンパイル時に静的検査が行われる
静的型付け(せいてきかたづけ)とはプログラミングパラダイムの一つ。変数や関数があらかじめ定められたデータ型の対象のみを処理するよう、厳密な記述を要求する言語的特性を言う
(基本的にWikipedia参照)
以上の事から『型宣言』の必要性と意味を何となく理解
でも、Haskellでは『型推論』っていうシステムがあって型推論ですべての式が矛盾なく型付け出来るのならば型宣言しなくても良いんだよね?
調べたけど、カリー化とか強い型付けとか型理論とか出てきて分からなくなったのでとりあえずスルーしておきます(T^T)
プログラムとか言語に関してのなぜ?どうして?が素人の私にはとても多い
ベースが違うのは分かっているけど分からない事をその場で調べるだけでなく、プログラミングの基礎や根幹となる部分をきちんと勉強したいと思う
そういう本何か探そっかな・・・