generated at
2/18/2025, 1:13:32 PM
仕様を満たした型
を設計する
仕様を満たしていることをデータ構造で表現する
仕様を型で表現する
型は仕様
「ある値が、この型に属している場合は、仕様を満たしている」ということを表現できるような型を設計する
その言語の型システムの能力にも大きく依存する
例
ref
仕様
key/value
のペアのリストを扱いたい
key
に重複がないことを満たしたい
安直にやると、
[(key, value)]
のようなデータ構造になる
しかし、これだけ見ると、リスト内で
key
に重複がないことは判別できない
重複がないことを確証するためには別途validationが必要になる
仕様を満たしたデータ構造を使う
Map key value
を使えばいい
Map
は
key
に重複がないことを保証している
型を見れば、
key
に重複がない、ということを理解できる
例
NonEmpty
検証済みであることを型で明示する
データ構造で表現するのが難しい場合は
newtype
を定義すればいい
smart constructor
とセットで使う
例えば、数値の
1
~
5
のみ許容する型とか
関連
Making Illegal States Unrepresentable
参考
Designing with types
ref
#functional_mini_patterns