since — 点集合を「p 以後」に切り出す
分類: 糖衣(stdlib・Gregorian 公開語=変換) / シグネチャ: since(p) : Stream -> Stream(p は日付つきの日時リテラル) / 名は確定(ADR-55・2026-10-19・spec §5.4) / 1.1 の追加拡張
意味
入力の点のうち p 以後(p を含む) を残す。展開は filter 1 段(糖衣=spec §4.8):
since(p) = s => s |> filter(t => t >= p)
対の before(p より前・含まず)と組んで半開 [since, before) を切る——評価範囲 [from, to)・窓・
isOpen と同じ境界規約。p は在圏 premise の tz: で時点に解決される(ADR-33)——since(2026-10-26) はその tz の
10/26 の開始瞬間。
時点どうしの順序 t >= p は 1.1 で定義した(spec §4.9「等値・順序の型」)。chronos 上の瞬間の全順序で、単位を
持たない——epochOrdinal(hour, …) の比較が「時の床」で切っていた形(14:30 を渡すと 14:00 が入る)と違い、
since(…T14:30) は 15:00 から。
例
日粒度——10/13 以後の営業日(10/12 はスポーツの日):
# eval: 2026-10-01..2026-10-20
@JP
bizDay |> since(2026-10-13)
#=> 2026-10-13 2026-10-14 2026-10-15 2026-10-16 2026-10-19
時刻付き——毎正時の列を 14:30 から 18:00 の手前まで。目盛り外の錨でも床に落ちない(15:00 から):
# eval: 2026-10-26..2026-10-27
@JP
hourly = everyInstant |> strideBy(1h, from: 2026-01-01)
hourly |> since(2026-10-26T14:30) |> before(2026-10-26T18:00)
#=> 2026-10-26T15:00 2026-10-26T16:00 2026-10-26T17:00
「締め切りまでの残り営業時間」は hourly |> filter(t => isOpen(t)) |> since(今の日時) |> before(締め切り)
(design/40-examples/11 §(n)・stdlib §2)。
落とし穴
-
「今」は式に埋めない——日単位の切り出しは評価範囲(
--from/--to)の分離が第一。式に書くのは時刻の 切り出しだけで、日時は引数や呼ぶ側で注入する(takeLastのuntil:と同じ据え方・ADR-52 判断 2)。 -
日付リテラルは定義の境界——書くのは、定義そのものに属する境界(開始日・終了日)に限る。
-
日粒度の列に時刻付きリテラル——日の点は 00:00 なので
everyDay |> since(2026-10-26T14:00)は 10/26 を 含まない(10/27 から)。当日を含めたいなら日付を書く(since(2026-10-26))。警告は出ない(文書化のみ)。 -
単独時刻
T14:00は渡せない——誘導つき静的エラー(呼び出し時に検査する=列が空でも止まる。ADR-51。順序は日付つきの日時リテラルで)。時点でないp(数値・ラベル)も同じく呼び出し時に止まる。「毎日 14 時 以降」は時刻の帯であって切り出しではない——ordinalIn(hour, day, t)の述語やisOpenで。 -
同名の top-level 束縛は静的エラー——
sinceは 1.1 で追加した予約語(spec §4.8)。利用側のsince(…) = …は 別の名に改名する。ラベル名(cycleのラベル列・labels:)にも使えない(1.0 でsinceをラベルにしていた定義は改名)。 -
新しい点は作らない——
pが入力の点でなくても「p以上の最初の入力点」から(点±幅の算術ではない。ADR-34 判断 4 は不変)。 -
整列・窓・註釈の輸送行は展開先
filterのもの——within(month) |> since(p) |> firstは成立し、覆域外の区間は そのまま註釈になる(stride(1, from: p)の自作糖衣だと註釈が評価域の末尾まで膨張する)。
関連
before(対・p より前)・filter(展開先)・at(時刻の付与)・
epochOrdinal(1.0 の書き方=序数の床比較)・takeLast(until: は点包含)・
spec §4.8/§4.9・ADR-55。