>>532
> 単純すぎて、どう堅牢性が上がっているのかも分からないし、
それは申し訳ない。

後者は、抽象データ構造にしてモジュールを分ければ、
プログラムの堅牢性が高まる。
module Vector (Vec2, newVec2, getX, getY) where
newtype Vec2 a = Vec2 (a, a)
newVec2 x y = Vec2 (x, y)
getX (Vec2 x, _) = x; getY (Vec2 _, y) = y
---
module Operation where
import Vector
v0 `add` v1 = newVec2 (getX v0 + getX v1) (getY v0 + getY v1)

とすれば、たとえば何らかの理由で2元ベクトルの表現方法を
2要素のタプルから2要素のリストに変えることになっても、
Vector モジュールの定義だけを変えるだけでよく、
Operation モジュールの定義には影響を与えない。
つまり、add の定義はそのまま使える。
これを私は「堅牢性が高い」と表現している。

>>530 の前者のように抽象の壁を設けないと、
データ構造の表現を変えた場合に、
そのデータ構造上の全ての演算の定義を変えなければならない。