状態管理のモデル案: spawn/killモデル

生と死のあるアクターを表現するためのモデルについて考えた(あくまで個人用メモ)。

以下の型変数sは世界の一意性、閉鎖性を表す。生命や名前を勝手に外に持ち出すことを防ぐために必要。

  • Life m a: 生命を表す型。aは生命の最終結果。
  • Name s a: 生命に与えられた一意な名前。
  • World s: 生命が住む世界を表すモナドで、以下の操作が可能。
spawn :: Life (World s) a -> World s (Name s a) -- 同じ世界に新しい生命を出現させる
kill :: Name s a -> a -> World s () -- 同じ世界の生命を殺害する
world :: (forall s. World s a) -> Life Identity a

worldは中で起きた生と死を管理し、その過程をある種の命として表す。

これだけでは文字通り何もできないので、生命の間でコミュニケーションする何かが必要。

時間の概念をどのようにして表現するかも考えなければいけない。

(追記)アプローチ

生命自身の動作を表す新たな型変数eを追加する。

spawn :: Life (World s) e r -> World s (Name s e r)
kill :: Name s e r -> r -> World s ()
contact :: Name s e r -> e a -> World s a

eはOperationalモナドやextensible effectsなどを使うことが想定される。