日本語 · English(未訳)

ADR-23: 本体層は core 族と糖衣の二層。糖衣は core への展開で消せる

判断: 本体層の演算子を、core 族(生成子・点変換・結合子・フィルタ・窓・選択子・ストライドの最小集合)と、 糖衣(monthEndbusinessDaysnextWeekday など、core 合成に名前を付けた略記)に分ける。糖衣は core への 展開規則として定義され、全て core に展開すれば消える。core は糖衣に依存しない(片方向依存)。

背景: 題材を core 族に忠実に書くと、便利語が実は複数の core 演算子の畳み込みだと判明した。bizDays は フィルタ+窓の畳み込み(ADR-06 の畳み込み禁止に抵触しかけていた)、month は生成子と窓の混同、monthEndwithin(month) |> last の略記。これらを core に開くと、代表例はいずれも少数の core 族の合成に落ちる。

# 糖衣で書いた姿
month |> bizDays(on: TSE) |> nth(2) |> nextWeekday(Fri)
# core に展開した姿
everyDay |> filter(on: TSE) |> within(month) |> nth(2) |> nextWeekday(Fri)

この二層は、premise 層の原始/派生(ADR-19)と同じ向きの階層をなす。糖衣=本体層の派生定義。知識レベル (premise 層)に顕現した構造が操作レベル(本体層)にも現れる。ただし完全な鏡像ではなく片方向の非対称を持つ (下記)。

却下した案: 糖衣を認めず core 族だけで書かせる案。「一行で書きたい」志向を殺すため却下。糖衣を入れる メリットが大きく、かつ下記の片方向依存により崩壊リスクが限定される。

帰結: