日本語 · English(未訳)

ADR-05: 型は一本に統一する(everything-is-a-stream)

判断: 点(単一日)と集合(複数日)を別の型に分けない。全てを時間ストリーム一種で表す。 単一の点が必要な文脈は選択子(first / nth など)で落とす。

背景: 型を一本化すれば、閉包性とネストが SQL のようにコスト無く手に入る。型を分けると 意図を型で表現できる利点はあるが、点⇔集合の変換規則と演算子の多重定義が増える。 閉包性こそが本言語の価値の源泉であり、それを型システムで保証する側に倒す。

却下した案: 点と集合を別型にする案。表現力は同等だが合成の単純さを損なうため却下。

帰結: 演算子は自然に数種へ分類される(生成子・点変換・結合子・フィルタ・窓・選択子。後に ADR-11 関連でストライドを追加)。

改訂(ADR-18・ADR-19 による限定): 本 ADR の「型は一本」は、本体層(スケジュールを紡ぐ層)の 内部でのみ成立する。premise 層(暦法を組み立てる層)の導入により、言語全体では「時間ストリーム型」と 「premise 型」の二型が存在する(ADR-18)。ただし各層の内部では引き続き型は一本で、それぞれの層内で閉包が 効く。「everything-is-a-stream」は「本体層内では everything-is-a-stream」と読み替える。

再改訂(ADR-25): さらに値型(数値・論理・列挙)が加わり、言語全体では「時間ストリーム型・premise 型・ 値型」の三型となる。本体層内で型が一本、という本 ADR の限定は不変。

注記(ADR-36): 結合子・軸所属に導入された整列(alignment)の静的検査は型の分裂ではない—— 整列は式の導出構造に付く静的性質(検査で読む註釈)であり、時間ストリーム型は一本のまま。同じ型の 二値の合成を統治で断る規則であって、型システムの拡張ではない(ADR-36 却下案「粒度をストリーム型の パラメータにする」参照)。