コンテンツにスキップ

RBS互換型

RigorはRBS構文で文書化されたすべての型形式をサポートします。この文書はRBS形式をRigorの解釈とRBS消去にマッピングする権威あるテーブルです。

ハッシュシェイプ(shape)消去アルゴリズムを含む完全な消去規則はrbs-erasure.mdにあります。RBSを超えるRigor専用の形式はrigor-extensions.mdにリストされています。予約済み組み込みリファインメント(refinement、篩型とも)名はimported-built-in-types.mdにあります。

RBS形式Rigorの解釈RBS消去
CC[A]名前的インスタンス型同じ
_I_I[A]インターフェース型同じ
aliasalias[A]エイリアス参照、必要に応じて展開同じまたは展開されたエイリアス
singleton(C)シングルトンクラスオブジェクト型同じ
string、symbol、integer、truefalseリテラルリテラルシングルトン型同じ
`AB`ユニオン型(union type、合併型とも)
A & Bインターセクション型(intersection type、交叉型とも)消去されたオペランドの後に同じ
T?`Tnil`
{ key: T }既知キーのハッシュレコード同じ
[A, B]固定アリティの配列タプル同じ
型変数境界と変性を持つスコープ型変数同じ
selfselfコンテキストでのオープン再帰レシーバー型RBSコンテキストが許す場合に同じ
instanceclassish-contextでの現在のクラスインスタンス型RBSコンテキストが許す場合に同じ
classclassish-contextでの現在のクラスシングルトン型RBSコンテキストが許す場合に同じ
bool`truefalse`のエイリアス
nilシングルトンnilnil
untyped動的型untyped
top最大の静的値型top
bot空型bot
void戻り値位置の「使用しない」結果マーカー有効な場所ではvoid、そうでなければ診断付きでtop
proc型呼び出し可能オブジェクト型消去されたオペランドの後に同じ

selfinstanceclassvoidはRBSにコンテキスト制限があります。Rigorは内部的により豊かなコンテキスト情報を保持できますが(MAY)、エクスポートされたRBSはそれらの制限を守らなければなりません(MUST)。

  • selfinstanceclass: それぞれのclassishまたはselfコンテキストでのみ有効。RigorはRBSが受け付ける場所でのみそれらを出力しなければなりません(MUST)。
  • void: メソッドとprocの戻り値位置、およびインポートされたシグネチャからそれを持つジェネリックスロットで有効。値コンテキストルールとインポートされたRBSルールについてはspecial-types.mdを参照してください。

内部型が無効なRBSコンテキストでこれらのマーカーのいずれかを含む場合、消去パスは最も近い有効な保守的型に書き直し、精度損失を報告しなければなりません(MUST)。エクスポート中の精度損失の診断ポリシーはdiagnostic-policy.mdにあります。

T?は内部的にT | nilに正規化されます(normalization.md参照)。エクスポート時、Rigorは有効なときはT?構文を優先すべきです(SHOULD);そうでなければ明示的なユニオンにフォールバックします。

RBSレコード({ key: T })とタプル([A, B])は正確な形式として受け付けられます。Rigorの内部ハッシュと配列シェイプ(structural-interfaces-and-object-shapes.md参照)はこれらのRBS形式を必須/オプショナル/追加キーポリシーと読み取り専用マーカーで拡張します;それらの拡張は決定論的に消去されます(rbs-erasure.md参照)。

RBSからの型変数の境界と宣言サイトの変性は保持されます。メソッド本体を通じたジェネリック保持 — 例えばメソッドが受け取ったのと同じパラメータオブジェクトを返すとき[S < _RewindableStream] (S stream) -> Sを推論する — はRigorの推論挙動であり、新しい表面形式ではありません。structural-interfaces-and-object-shapes.mdを参照してください。

booltrue | falseのリテラルエイリアスです。Rubyの真偽性は任意の値を受け付けます。Rigorは真偽性をフロー述語としてモデル化します。boolに広げることはしません。special-types.mdcontrol-flow-analysis.mdを参照してください。

untypedはRBS境界で両方向に保持されます。内部精密表現はDynamic[top]で、完全な代数はvalue-lattice.mdにあります。RBSからRigorへのラウンドトリップとその逆は正確です。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.