prelude.record
同種の string キー付きマップ record[T] の操作 — get / set / remove / keys / entries / merge。
record[T] (パース済み JSON オブジェクトの entries、env の一覧などが持つ形) の操作。default import
経由で record. qualified に呼ぶ。パラメータは一貫して target という名前 (prelude.array と
揃えている)。
agent
record.get
primitive agent get[T](target: record[T], key: string) -> T | nullkey の下の値を読む。key が無ければ null。
record.set
primitive agent set[T](target: record[T], key: string, value: T) -> record[T]key の下に value を持つコピーを返す (既存エントリを置き換える)。
record.remove
primitive agent remove[T](target: record[T], key: string) -> record[T]key を持たないコピーを返す (key が無ければ無変更)。
record.keys
primitive agent keys(target: record[unknown]) -> array[string]すべてのキーをソート順で返す。
record.has
primitive agent has(target: record[unknown], key: string) -> booleankey が存在するか。
record.size
primitive agent size(target: record[unknown]) -> integerエントリ数。
record.entries
primitive agent entries[T](target: record[T]) -> array[[string, T]]すべてのエントリを [key, value] ペアの配列として、キーのソート順で返す — record の for-iterable
なビュー。
record.values
agent values[T](target: record[T]) -> array[T] {
for (let [_, value] in record.entries(target = target)) {
next value
}
}すべての値を、keys の対となる形でキーのソート順で返す。entries を直接 for で辿るので、
値の読みは常に total (キーごとに get して欠損を扱う、という一手間がない)。
record.merge
primitive agent merge[T](left: record[T], right: record[T]) -> record[T]両方の record のエントリを 1 つにする。キーが重複したら right の値が勝つ (レイヤ化した
設定を呼び出しごとに拡張する、デフォルト値の上書き方向)。http.post_json の header マージが
この形。
record.empty
primitive agent empty() -> record[never]空の record。