scalaz.Traverse#traverse で F=List, G=Option の時に、途中でNoneを返す要素があっても全ての要素にfが適用されてしまう。 cats の Traverse だとNoneになる要素以降のfは評価されない。ぐぬぬ
2016-06-01 18:19:45@gakuzzzz あとこんな違いもあります(今試したらcatsは逆順じゃないっぽい) github.com/scalaz/scalaz/…
2016-06-01 18:47:49@gakuzzzz 実装全然ちがいますね・・・ github.com/scalaz/scalaz/… github.com/typelevel/cats… これしかもちゃんとstack溢れないのか・・・
2016-06-01 18:51:13@xuwei_k そうなんですよね。 foldLeft は B 返すのに foldRight は Eval[B] 返すのがちょっと面白い。けどいいのかコレ?という気も
2016-06-01 18:54:02@gakuzzzz scalazのListのtraverse、この変更 github.com/scalaz/scalaz/… とかの影響で、List => DList => IList にしてfoldRight呼ぶ、みたいな超無駄なことしてる気がしてきました、つらい・・・
2016-06-01 19:05:05@gakuzzzz 猫をパクったら github.com/xuwei-k/scalaz… 見事にNoneあったら評価止まるようになったけど、見事にスタック溢れるので、Eval素晴らしい(?)みたいな結論になりました・・・
2016-06-01 19:20:31@gakuzzzz (自分が言い出すのなんか気まずいので黙ってたけど)この例とか出して「scalazにcatsのEvalみたいなやつ入れようぜ!」って真面目にissue立ててくれていいですよ・・・ (もしくは他の方法でListのtraverse改善pull reqを)
2016-06-01 19:22:34@gakuzzzz まぁ即興でやったので、移植間違ってないか、本当にNeedとEvalの差が原因なのか?というの、今一度確かめたほうがいい気はしますが
2016-06-01 19:25:56github.com/xuwei-k/scalaz… Needの代わりにTrampoline使えばいけるのでは、と思ってやってみたが敗北したので、ますます辛い
2016-06-02 10:13:13@gakuzzzz 一瞬、それぞれのインスタンスでoverrideしないといけないの面倒だなーと思ったけど、これ結局catsでもOptionのmap2Evalがoverrideされてないとあの動作になってない、ということなんですかね?(ちゃんと確かめてない)
2016-06-03 21:36:12@xuwei_k cats も 短絡になるように override してるっぽい感じですね。 github.com/typelevel/cats…
2016-06-03 21:42:22