Concurrent Clean : PassFail
[id:lethevert:20061126:p2]で導入したPassFailだけれど、'!*Handle -> (!PassFail Info Error, !*Handle)'という組合せで使うことが多くて、かつこれをモナドで使うことを考えて、
::PassFail u e i = (Pass) infix 0 !u !i | (Fail) infix 0 !u !e
という風に定義しなおすことを検討している。
自分のライブラリを見たところ、正規表現モジュールで、一意型と組み合わせないで使っている所があったので、両方定義しておくのがよいのか。(パーサーとかで使う可能性があるのかな?)
-
-
- -
-
要件をいろいろ検討しているうちに、汎用として定義するよりも、専用で定義するほうがよさそうだという結論に至った。
理由として、モナドを作るときに、
model1 cgi mh = let ... in mh Pass ... model2 cgi mh = let ... in mh Pass ... mapping cgiM = cgiM >>\ model1 >>= \m1 = model2 >>= \m2 = return [view1 m1, view2 m1 m2]
という風に書きたい。つまり、modelの第1引数のcgiは共有変数にして関数の返値に含ませたくないのだが、上の拡張したPassFailを使うとそのように書くことができないため。
-
-
- -
-
あれ?書けるかも? ← 書けなかった。