Re:Folding Promises in JavaScript
by charliesome on Thursday September 21, 2017 @04:27PM
(#15307020)
Sorry, I should've been more clear. You're right - you can absolutely build sequence out of the bind operation for any monad.
Promise.all is not just sequence though, there's some additional subtleties to it. In particular the fail-fast behaviour:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
That's the kind of fundamental coalescing operation that you cannot implement with bind on plain monads.
Actually, they do. Haskell calls it sequence :: (Traversable t, Monad m) => t (m a) -> m (t a) [1]
It works by consuming the structure outside the monad and rebuilding it inside. A possible implementation specialized for lists is
[1] http://hackage.haskell.org/package/base-4.10.0.0/docs/Prelud...