masaedw / PuddingX

BSD 3-Clause "New" or "Revised" License
1 stars 1 forks source link

EitherT の代わりに ErrorT に変更 #1

Closed swtw7466 closed 11 years ago

swtw7466 commented 11 years ago

EitherT の代わりに ErrorT を使うように変更してみました。 これで transaction 関数が大分すっきりしました。 本件の Either は単なる左/右なだけでなく、 左はエラー値を表しているので、意味から考えても ErrorT の方が適切でしょう。

ErrorT の場合 Left に利用できるのが Error クラスのインスタンスである必要があるので むりやり instance Error ByteString していますが、 警告 ON でコンパイルすると orphan instance といわれます。 これが気になるようなら、

のいずれかかと思います。 真面目に型を定義した方が Haskell ちっくだとは思いますが、 今回の場合このエラーを見るのは他のプログラムではなくユーザなので、 ライブラリとして他のプログラムに組み込まれるならともかく、 現時点では String で十分な気はしますね。

ともあれこれで、EnvWithError 環境下に居る限りいつでも throwError で処理を中断でき、 runErrorT でさくっと Left 値として取り出せるようになったわけです。 こうすっきり書けるのを見てるとなんか C# やら Java やらの try-catch って 何だったんだろうって気がしてきますね…。

masaedw commented 11 years ago

もう一個の方に含まれてるので却下で