3ヶ月くらい前に、途中まで書きましたが
あらためて続きをやってみたらできましたヤッタ-。
「できた」というのは、とりあえず fumieval さんの以下の記事のコード
Freeモナドを超えた!?operationalモナドを使ってみよう
を、Scalaに翻訳できたということです。
ポイントとしては
- 数日前ScalazにCoyoneda追加されてたので、それを使うようにした
- 前回liftFという関数がよくわからなくて詰まったが、一ヶ月前に追加されてた
- fumievalさんのコード中にでてくるProgramという型は、数日前Scalazに追加されてるFreeCと同じだった
- RankNtype相当のことをするために、ScalazのNaturalTransformationが必要になったが、それ以外は、それほど大きな問題なく翻訳できた。まぁHaskellよりも型を多く書かないといけなかったり、変数が多くなってしまうのは、いつものこと
追記:
以前、とある人が書いてたscalazのFree MonadでのloggingのサンプルもOperationalにしてみたらできた
https://github.com/xuwei-k/free-monads/commit/7045d74291399c