TL;DR
内容
不変条件は、型システムで直接表現できる。たとえば「Order は 1 行以上の OrderLine を持つ」という条件である。
空にならないリストは F# に組み込まれていないので、自分で定義する。この場合、add や remove のような操作関数も必要になる。
type NonEmptyList<'a> = {
First: 'a
Last: 'a list
}FSharpx.Collections のようなライブラリを使う方法もある。このライブラリには NonEmptyList<'T> が用意されている。
type Order = {
// ...
OrderLine: NonEmptyList<OrderLine>
// ...
}