effect system勉強会に参加してきた

algebraic effectsやextensible effectsについての勉強会
正直全然わからずに書いているので以下おおよそ適当です...
本当は、勉強会当日に公開しようと思ったのですが、内容が難しすぎて消化してたら時間がたってしまいました...

algebraic effectsやextensible effects、それぞれの出目は違う?けど似ているところもある。というか両方共抽象化だから、広い意味で似ている?なんてことを思っています。

個人的にはalgebraic effectsってfreer monadに似ているような気がして、algebraic effectsもロジックとエフェクトを分離している感じで、extensible effectsもそういうことが出来るけど、こっちの方はモナドの合成はスタックになるのを直和で表現することで扱いやすくしている意味合いが強め?
雑な理解だとモナドを特定のエフェクトをするものと捉えるとextensible effectsもalgebraic effectsみたいなもんなのかな?
algebraic effectsの方はモナドが出てこないから合成は自分で実装する感じなのかな?
というようなことを考えつつ...

Extensible Eff Applicative

Monadに比べたApplicativeの良いところは、状態をもたない(もてない)ので並列処理ができたり、エラーチェック結果を複数持てたりする
そんなApplicativeをextensible effectsにした話 Free Applicativeの話をちゃんと聞いたのは初めてだったので勉強になりました。

www.slideshare.net

名前付きeffects

extensible effectsってそもそもHaskell出身でいいのかな?他の言語ではScalaでしか聞いたこと無いし...?
Haskellのパッケージ的にはextensible effectsがでてfreer effectsやextensibleがでた感じで、今は発表者のfumieval さんのextensibleだけがメンテされている感じ?もともとfreer effectsは配列でMonadを持っていたのをdictとして名前付きで持てるようにすることで同じMonadインスタンスが持てるようにしているという話。この後algebraic effectsでも配列の話でeffectsを持っている話が出てきて似ているなーと思ったけど、そうなのかな?
名前付きeffects

Effect{ive,ful} Cycle.js

freer monads more extensible effectsで同じような図が出てくるんですよねー。副作用をエフェクトって捉えるとやっぱり同じもんなのか... f:id:t10471:20190527233403p:plain

qiita.com

Effective Rust

ここに来てコルーチンの話が...以降の発表者のなかにも継続の話が出てきて、そっちの文脈も関係しているのか...ここで言うコルーチンは非対称コルーチン?

Asymmetric CoroutinesによるOneshot Algebraic Effectsの実装 - lilyum ensembleに下記のように書いてあるし、そうなんだろうなー...

Algebraic effects and handlers(以降 “algebraic effects” と省略)は、いわば限定継続を取れる例外である。

docs.google.com

Monads and Effects

effectをモナドのパラメーターとして表現して、effect付きのパラメトリックモナドは合成出来てeffectルールを持って作用していくような体系を作ったという感じなのでしょうかね...? speakerdeck.com

How do you implement Algebraic Effects?

コルーチンやFreeモナドとAlgebraic Effectsの比較、Algebraic Effectsはそれらの一般化と捉えることが出来るのかな?
そう捉えると面白いということっぽいのかな? nymphium.github.io

Effective Idris: Effects

IdrisにEffects あったんだなー。
HaskellMonad前提の言語だけど、そういうのが弱い?からeffectを導入しやすいのかな? keens.github.io

Row-based type systems for algebraic effect handlers

Parametric effects by row polymorphismということで、Algebraic Effectsの説明なんかもありしました。
effectを型に入れたり、列多相的にeffectを入れた感じなんですかね?

www.slideshare.net

全体的に勉強が足りないな...
だんだん最後の方が適当に...