wiki 全体を Reader モナドにくるむ

zyxwv2007-03-04

昨日からずっと、wiki 全体を Reader モナドにくるもうと思って作業を続けてきたわけですが、結論から言うと、失敗しました。submit っていう関数の型らへんで。以下、その原因など。WASH を知らないと全然わからないとは思うけど。

WASH では、ページの遷移をまたいでデータを共有するには submit っていう関数を使うしかない。で、submit の型がこんな感じ。

submit :: (InputHandle h, CGIMonad cgi) =>
h INVALID
-> (h VALID -> cgi ())
-> WithHTML x cgi ()
-> WithHTML y cgi ()

第一引数は、入力フォームに入れられた値を解釈して CGI () を返す関数。ここの型が問題で、CGIモナドにつつんでると、

h VALID -> Reader Env (CGI ())

みたいな感じになっちゃう。入力された値を使って次のページの処理を変えなくちゃいけないから、Reader Env (CGI ()) の中身の CGI () を先に出しちゃうってのも無理。

…書いてたら余計混乱してきた。むーん。