Add associative map constraints and range refinement

This commit is contained in:
2026-08-14 06:26:15 +09:00
parent 8198b615a8
commit cc6ab40807
52 changed files with 8951 additions and 6918 deletions
@@ -133,10 +133,25 @@ Names = [...String];
PositiveInts = [...(Int & > 0)];
```
複数の配列制約を `&` で合成した場合、各 concrete 要素すべての要素制約を合成する
要素が object schema の場合は、その schema に含まれる default も各要素へ適用される。
複数の配列制約を `&` で合成した場合、各 concrete 要素すべての要素 range で絞り込む
要素が object range の場合、右辺にしかない field は default の有無にかかわらず abstract のまま各要素へ残る。
左辺にしかない field は右辺の field domain 外なのでエラーになる。
要素制約のない `Array` primitive type は存在しない。
## 連想配列制約
連想配列制約は `{...T}` と書き、object の任意の field value を `T` に対して絞り込む。
```dcdl
Services = {...{
port = Int;
enabled = Bool default true;
}};
```
key は schema で列挙せず、空 object も許容する。
固定 object field と任意 key の value constraint を混在させる構文は現在サポートしない。
## default
`default` は制約ではない。