I don't think you can call both computations equivalent, because the former has a sequential control flow, whereas the latter has a nested one. Do/bind needs to conduct some additional plumbing to allow "short circution" as the nested chain does. And that is exactly my question. How do they do it? With a promise chain I can short circuit by invoking the error callbac, but this only works for the promise type. With Do , however, short circution needs to work for various monads.
I don't think you can call both computations equivalent, because the former has a sequential control flow, whereas the latter has a nested one.
Do/bindneeds to conduct some additional plumbing to allow "short circution" as the nested chain does. And that is exactly my question. How do they do it? With a promise chain I can short circuit by invoking the error callbac, but this only works for the promise type. WithDo, however, short circution needs to work for various monads.Maybe this is what you're talking about?
github.com/gcanti/fp-ts-contrib/bl...
The extra plumbing is just a
mapoperation to keep variables in context. If you want to do it manually here's what it does under the hood.