2021-08-01: lite-crazy を公開した
やったこと
ポプマス
どうにかバルーンイベントの神SUMMERを取れた。
最終日っぽいのでギリギリになった。
バルーンイベントはもっと長くしてほしい。
lite-crazy
ちょっと前から作っていたライブラリ。
https://github.com/MakeNowJust-Labo/lite/pull/28
State モナドの状態更新の順序を逆順にして未来の状態を元に計算できるようにした逆状態モナド RState とか、
通常の状態と逆方向の状態の両方を持った Tardis というモナドがあって、それらを実装したもの。
Scala だとそれらの実装のために関数の引数を遅延できないといけなかったので、Lazy という遅延評価を行い (ついでに値をキャッシュする) クラスを用意して、それを元に面白状態モナドたちを実装している。
引数を遅延させないといけないのは、flatMap では結果の値を計算するのに未来の状態が必要で、未来の状態を計算するのには前の結果が必要という循環が起こっているので、それを解消するためだったりする。
そのせいで flatMap の型が (Lazy[A] => RState[S, B]) => RState[S, B] みたいになっていて、cats とかの Monad 型クラスの実装にはできなくなっている。
が、これはどうしようもないっぽい。
一応 lite に入れておいたけど、メンテが面倒になったら消えるような気もする。
面白ライブラリです。