>>655
Haskellはプログラミングに拡張された数学そのもの。
本質的には整数、実数の集合の様に特徴で分ける型。
等価や比較、逐次処理などの機能で分けた型クラス。
その二つを数学に追加したらもうHaskell。
遅延評価やパターンマッチは数学をプログラミングにほぼそのまま持ち込むための手段と言って良い。

モナドとかファンクタは型クラスの一種でしかない。
算数や数学知ってれば、型と型クラスの概念覚えればそれでおk。

型クラスがオブジェクト指向のインターフェイスに似てるってのは、自作の型に=や<とか使いたかったら型クラスのインタンスとして登録する為に=や<を使える様に自作の型用の実装を書くから。
まあ、基本的な型クラスは型定義の後ろにderiving (Eq,Show)とかで自動実装してくれるんだが。

難しいのはモナドやファンクタであって、それはHaskellの特徴だがHaskell固有じゃない。
Haskellそのものはとても簡単。