Trim open issues to materialization

This commit is contained in:
2026-07-09 02:46:28 +09:00
parent 8e1cb01f52
commit 6d80c66144
18 changed files with 92 additions and 187 deletions
@@ -188,11 +188,12 @@ RuntimeValue =
## default の合成
同じフィールドに複数の `default` 合成された場合の詳細規則は未確定である。
現時点の単純な方針は以下である。
`default` 合成規則は以下である。
- `&` による default 同士の衝突はエラーにする。
- 同一 default 値は許可してよい
- `//` による patch では右辺 default が左辺 default を置き換える。
- `&` で片方だけが default を持つ場合、その default を保持する。
- `&` で両方が異なる default を持つ場合、conflict になる
- `Abstract & Concrete` が成功した場合、結果は concrete value になり default は消える。
- `//` では右辺が左辺を置き換える。object/object の場合は field ごとに再帰 patch されるため、右辺 field の default が左辺 field の default を置き換える。
この方針により、`&` は制約を保った合成、`//` は上書き操作として説明できる。
`default` thunk は materialize 時に必要になった時点で評価する。
評価された default value は、同じ abstract value に残っている制約を満たす必要がある。