Decodal
This commit is contained in:
@@ -8,14 +8,14 @@
|
||||
materialize は以下を行う。
|
||||
|
||||
- 必要なフィールドを評価する。
|
||||
- 明示値がないフィールドに default を適用する。
|
||||
- 明示値がない abstract value に default を適用する。
|
||||
- 採用された値が制約を満たすか検証する。
|
||||
- 未解決の制約だけが残っているフィールドをエラーにする。
|
||||
- default を持たない未解決の abstract value をエラーにする。
|
||||
- 未適用の関数など、データとして出力できない値をエラーにする。
|
||||
|
||||
## 例
|
||||
|
||||
```n
|
||||
```dcdl
|
||||
MyConfig = {
|
||||
host = String;
|
||||
port = Int default 8080;
|
||||
@@ -25,7 +25,7 @@ MyConfig = {
|
||||
`MyConfig` を materialize すると、`host` は具体値も default もないためエラーになる。
|
||||
`port` は `8080` が採用される。
|
||||
|
||||
```n
|
||||
```dcdl
|
||||
Config = MyConfig & {
|
||||
host = "localhost";
|
||||
};
|
||||
@@ -33,7 +33,7 @@ Config = MyConfig & {
|
||||
|
||||
`Config` を materialize すると以下になる。
|
||||
|
||||
```n
|
||||
```dcdl
|
||||
{
|
||||
host = "localhost";
|
||||
port = 8080;
|
||||
@@ -45,22 +45,22 @@ Config = MyConfig & {
|
||||
`default` は materialize 時にのみ fallback として採用される。
|
||||
|
||||
```text
|
||||
constraint = Int
|
||||
value = none
|
||||
default = 8080
|
||||
Abstract {
|
||||
constraints: [Int]
|
||||
default: 8080
|
||||
}
|
||||
```
|
||||
|
||||
この cell を materialize すると、`8080` が採用され、`Int` を満たすか検証される。
|
||||
この abstract value を materialize すると、`8080` が採用され、`Int` を満たすか検証される。
|
||||
|
||||
明示値がある場合、default は採用しない。
|
||||
明示値は concrete value として表現され、default を保持しない。
|
||||
|
||||
```text
|
||||
constraint = Int
|
||||
value = 9000
|
||||
default = 8080
|
||||
Concrete(Int(9000))
|
||||
```
|
||||
|
||||
この cell の最終値は `9000` である。
|
||||
この値の最終値は `9000` である。
|
||||
|
||||
## エラー分類
|
||||
|
||||
@@ -81,7 +81,7 @@ default = 8080
|
||||
|
||||
`match` に fallback 分岐がなく、どの分岐にも一致しなかった場合はエラーになる。
|
||||
|
||||
```n
|
||||
```dcdl
|
||||
match value {
|
||||
>= 10: "large";
|
||||
}
|
||||
@@ -89,14 +89,10 @@ match value {
|
||||
|
||||
`value` が `10` 未満であれば失敗する。
|
||||
|
||||
## try / catch
|
||||
## エラーは値ではない
|
||||
|
||||
`try / catch` は将来的な候補である。
|
||||
組み込み向けの小さな核では必須ではない。
|
||||
エラーは runtime value ではなく diagnostic として扱う。
|
||||
通常の式はエラー内容に基づいて分岐できない。
|
||||
|
||||
失敗は主に以下から発生する。
|
||||
|
||||
- assert 相当の制約検証。
|
||||
- `&` による合成。
|
||||
- import。
|
||||
- materialize。
|
||||
汎用 `try / catch` は core には含めない。
|
||||
fallback は `default`、`match`、および将来的な optional import / optional field access のような限定された仕組みで表現する。
|
||||
|
||||
Reference in New Issue
Block a user