Donut とは
Note: Donut は開発中のプロトタイプです。仕様や動作は予告なく変更される可能性があり、このドキュメントも不完全・不正確な部分を含む場合があります。ドキュメントの大部分は Claude Code によって生成されています。
Donut は 高次元セル を合成してプログラムを組み立てる言語です。
通常のプログラミング言語が「値」と「関数」を扱うのに対し、Donut では セル を宣言して繋ぎ合わせます。セルには次元があり、次元ごとに異なる役割を持ちます:
| 次元 | 意味 | 例 |
|---|---|---|
| 0-cell | 環境・コンテキスト | C: * |
| 1-cell | 型 | Int: C → C |
| 2-cell | 演算・プログラム | add: Int Int → Int |
| 3-cell | 等式・書き換え | α: m x; m → x m; m |
次元は上に開いており、4-cell、5-cell… と続きます。
基本的な考え方
- 宣言: プリミティブなセルを置く。型は source と target で決まる
- 合成: セルをスペースや
;で繋ぐ。境界が一致すれば合成できる - 型検査: 合成の整合性を自動で検証する
何ができる?
抽象構造の記述: モノイドなどの代数的構造を宣言し、結合律(pentagon identity)のような高次の coherence 条件を表現できます。
具体的な計算: import "sys" でプリミティブ型(f32, bool 等)を読み込み、2-cell の合成で Mandelbrot 集合のようなプログラムを書けます。評価結果はリアルタイムに確認でき、条件を満たせば GLSL にコンパイルしてシェーダー描画もできます。
Functor: ~> で2つの構造間のマッピングを定義します。プリミティブの対応だけ書けば、合成セルは自動的に変換されます。
最初の例
u: *
x: u → u
m: x x → x
uは 0-cell(環境)xはu上の 1-cell(型)mはx xからxへの 2-cell(二項演算)
m の型 x x → x は、1-cell x を2つ並べたものを受け取り x を返す 2-cell です。これだけで「モノイド的な構造」の骨格が記述できています。
さらに結合律を表す 3-cell を宣言すると:
α: m x; m → x m; m
m(m(a,b), c) = m(a, m(b,c)) という結合律の「証拠」が 3-cell として現れます。