Invariant(不変条件)
値同士の間にある必ず満たすべき不変な条件
型で表せるものとそうでないものとある
どうやるか
データはimmutableなので、作成時にのみvalidationすれば十分にIntegrityは保証される
primitiveでは同じ型の値も型レベルで異なるものとして扱う
こんなのもあった
型で表せるものの例
「Orderは必ず1つ以上のOrderLineを持つ」
OrderLines :: NotEmptylist<OrderLine>という型にする
型で表せないものの例
「UnitQuantityは、1~1000の間の値を取る」
参考