データの性質を抽象化して、値の種類を分類し、値の種類ごとに有効な関数の集合を定義するために、Javaではclassを宣言し、Haskellではmoduleを宣言する。
同じアプローチなんだけど、Javaだとオブジェクト指向プログラミングと呼び、Haskellだと関数的なプログラミングと呼ぶ?
Javaのクラスをイミュータブルに設計することで関数的なアプローチに近づいた。
Haskellの関数群とデータの構築操作を、値の種類ごとにmoduleにまとめることでオブジェクト指向プログラミングのカプセルと同じアプローチになる。
GoやPythonの関数とメソッドの違いにも通じている
特定のデータ構造と明示的に関連づけた関数がメソッド。
オブジェクト指向プログラミングのカプセル化の実現。