2007-05-05から1日間の記事一覧

Concurrent Clean : モデルとビューの関連付け

一意型を含んだ関数をモナドで再構成する方法としては、[id:nobsun:20060907:monadicIO]で説明されている方法があるのだけれど、これはモデルの側の記述が自然にならないのでちょっと嫌。(最大の原因は、シノニム型を型クラスのインスタンスとして宣言でき…

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 という…

Concurrent Clean : do記法

エラーハンドリングでcase文を使うことの繁雑さを解消したい。 func u = with u do Pass a <- funcPassOrFail 123 catch e = return e b <- process a return (a,b) finally _ <- close と書くと、 func u = `finally0 (`0 u) where `0 u # (`r0,u) = funcPa…

そういうのがあったら

参加してみたいですね。 cf. [id:yoriyuki:20070505:p1] 最近、オフラインでもN/Wを広げたいと思っているので。

Concurrent Clean : モナドは無理

結局、望むような記法を可能にして、かつ、モナドにすることは無理らしい。 - 他にも、一意型をモナドに含ませようとすると、微妙な問題が起きることに気づいた。 や、これはもともと知っていたのだけれど、再確認したという方が正しい。

Concurrent Clean : 別のアイデア

わざわざモナドとして定式化する必要はなかったかもしれない。 というのは、これを使いたい局面は非常に限られているので、グローバルな整合性を取る必要なんてなくて、ローカルに定義してやればよい。 mapping cgi bind return = cgi bind model1 \m1 = bin…