2010.07.01 Thu. putEvent は Answer が GivemeEvent になるまで、もどらないようにするべきかも。 つまり、次の Event が必要になるまでは、内部でいろいろと作業を行っていれば良いのだ。 ただし、yavie 側での対応にもそれなりの手間がかかると思われるので、 putEvent_ 等にして test をくりかえす必要があるだろう。 Goodbye で loop を脱ける。 Answer answer では、用意された answerbind を実行する。 GivemeEventbind と NoAnswer は無視して良いだろう。例えば単純に error とする、等。 ContainerIs が返ったら、value について何かして、その後、putEvent 類似の関数で、 talker に message を送る。 putEvent はその下に、event ではなく Message を引数とする基礎的な関数を必要とする。 2010.07.02 Fri. putEvent_ の名前を変えよう。 2010.07.06 Tue. modifyContainer は今や modify と変わらないので、 yavie の modifyContainer を全て modify に変更した上で、 問題がなければ消去しよう。 また、goodnight 後に、もう一度、output をするようにしたい。 それと、getEventValue は必要かどうか。 EventDriven の interface を変えずに Talker の内部を変えようと思う。 delegate が本当に delegate するようにしたい。 eventbind が重なっているという image だ。 そして、上に重なっているのが delegate だったら、下の eventdriven を実行する。 しかも、それが、>> の途中にあったとしても、だ。 今のように return value によって Answer を返すやりかたではうまくいかないだろう。 とりあえず、EventDrivenNew は、Talk を参照するようにしておいて、 TalkNew は自由にさせておこうかな。 2010.07.07 Wed. delegate は実はとても難しい。 つまり、[ someMonad ] を保持しておいて、 some >> delegate >> other の delegate 部分を置き換えるということ。 単純なところからやっていくしかないか。 ああ、DelIO は state というより reader の方でいいのかもしれないな。 だいたいのやり方は分かったが、すこしコードが汚なすぎて対応できない。 コードを整理してから、delegate を実装する。