Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Donut とは

Note: Donut は開発中のプロトタイプです。仕様や動作は予告なく変更される可能性があり、このドキュメントも不完全・不正確な部分を含む場合があります。ドキュメントの大部分は Claude Code によって生成されています。

Donut は 高次元セル を合成してプログラムを組み立てる言語です。

通常のプログラミング言語が「値」と「関数」を扱うのに対し、Donut では セル を宣言して繋ぎ合わせます。セルには次元があり、次元ごとに異なる役割を持ちます:

次元意味
0-cell環境・コンテキストC: *
1-cellInt: 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
  • u0-cell(環境)
  • xu 上の 1-cell(型)
  • mx 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 として現れます。