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