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
/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. 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
map
operation to keep variables in context. If you want to do it manually here's what it does under the hood.