まず、次Eitherのように生成される s の(無限の) リストがあります。
x :: A
...
f :: A -> Either B A
...
xs :: [Either B A]
xs = iterate (>>=f) (Right x)
リストにはいくつかRightの s (常に有限数) が含まれ、同じLeft値が繰り返されます。私が必要とするのは、すべてのRights とLeftそれらの後に 1 つを取ることです。この特定のケースでは、たとえば関数を変更することでも実行できますが、最善の一般的な方法にも興味があります。