f = do b ← do a = g() if a.valid then B(a, true) else do a = h() B(a, false) return C(b)
近いが遠ざかった・・・ これは結局無名関数の即時実行ができるみたいな気持ち
C f(){ B b = [(g,true), (h,false)].firstJust((fu,fl)=>{ A a = fu(); a.valid ? Just(B(a,fl)) : Nothing }); return C(b); }
なるほど?あえて関数型スタイルにするというのもまぁ
C f(){ A a = g(); if(a.valid) goto[then](B(a,true)); a = h(); goto[then](B(a,false)); then(b): return C(b); }
わりとありだとおもうんですけどねー。安全性の確保とかの問題はある。ただ2つの道が同等に扱われつながるというのがわかりにくいかなぁ。
やりたいことはこういうことだとおもうんですよね。でもこれは並列すぎる。うーん。phi関数周りの気持ちだとこうなってしまうなぁ
結局直列と並列を合成する、という気持ちかもしれない。