モナド (Monad) 前回は、関数的に入出力を表現しながら、制御構造を表現する方法を検討しました。今回は、このアプローチを進めて、組み立て可能なソフトウェア部品として利用可能な構成について検討します。 前回の処理がソースコードにハードコードされていました。しかし、各アクションはそれぞれ別々の関数として独立しているため、これらのアクションを別々に定義して必要に応じて組み合わせて利用できるよう部品化することができます。また、部品化のついでに、トップレベル以外でアクションを実行することができないように、アクションをカプセル化することを同時に行います。 ここでは、部品化の仕掛けとして、モナドを利用します。まず、次のようなコンテナを用意します。カプセル化によって、プログラム中でコンテナから値を取り出すことは、できないと仮定します。 class IO: def __init__ (self, *v)