extensibleの小さなサンプルを書いてみた
モナドのスタックの取り回しが面倒に感じているので、そろそろ何とかしたいと思っていました。ここでようやく重い腰を上げて、extensible
にチャレンジです。ウェブ上にある情報は、複雑だったので、もっと小さなサンプルを書き下してみました。
mtl
とcompatible
の意味は、MonadReader
やMonadState
クラスを使って実装した場合を意味しています。Reader
モナドを直接使っている場合は、コードの修正が必要です。
extensible
の場合は、書き方が2通りあると思いますが(あってる?)、型クラス制約を使ったAssoicate
+TypeApplication
のパターンがベターと思いました。
小さなサンプルだと、extensible
の場合記述量が多くなり、まったくメリットは感じられませんが、規模が大きくなるとメリットが上回ると思います。
小さなサンプルが書けて、心理的障壁はなくなったので、今後は使っていくと思います。