generated at
Invariant(不変条件)
値同士の間にある必ず満たすべき不変な条件
型で表せるものとそうでないものとある



どうやるか
smart constructorを使用する
データはimmutableなので、作成時にのみvalidationすれば十分にIntegrityは保証される
primitiveでは同じ型の値も型レベルで異なるものとして扱う
hsやpursならばnewtypeを使う
こんなのもあった
F#ならば、Units of Measureを使う


型で表せるものの例
Order は必ず1つ以上の OrderLine を持つ」
OrderLines :: NotEmptylist<OrderLine> という型にする
型で表せないものの例
UnitQuantity は、1~1000の間の値を取る」
普通はsmart constructorとかで対応すると思う




参考