Monad Morphismによる局所的な状態の表現,
香川 考司


アブストラクト

破壊的代入,入出力などの副作用を関数型言語で模倣するプログラムを書く際 に,副作用を monadというある種の条件を満たす型構成子として表現すると, プログラムの可読性,変更のしやすさなどが増すことがわかってきている. しかし,従来では代表的な副作用である``状態''を扱う場合に, 1つの(平板 な)構造しか状態として扱うことができず,関数型言語の特徴のひとつである, 組やリストなどの階層的データをその構造をいかして状態として扱うことは難 しかった.その結果,状態を扱うプログラムをこれらのデータ型を介して部品 化することができないため,あるデータ型の状態を対象として書かれたプログ ラムの部品を,他のデータ型を状態として持つ場合に再利用することが難しく, 関数型言語に monadを導入する動機の1つである命令的プログラムの書換え, 再利用の容易性が達成されたとは言い難かった.例えば,配列を 2つ以上扱い たい時に,どのように配列を 1つだけ扱うプログラムの部品を再利用してプロ グラムを書けばいいのか,その方法がわからなかった. この論文では,階層的なデータ型の中の構成要素の``位置''を monad morphismとして表現し,その位置にあるデータを局所的状態として扱うことに より,複合的,階層的なデータをその構造に自然な形で状態として扱う方法を 提案する.その結果,プログラムの部品化を容易に行なうことができるように なる. 結果としてのプログラミングのスタイルは,オブジェクト指向プログラミング を思い起こさせるものとなる.ここでは,オブジェクト指向との対応について も述べる.