News for hackers. Stuff that matters.
Re:Folding Promises in JavaScript by yorwba on Thursday September 21, 2017 @12:10PM (#15304899)
> not all monads support a coalescing operation like Promise.all.

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

  sequence [] = return []
  sequence (h:t) = do
    h' <- h
    t' <- sequence t
    return (h':t')
[1] http://hackage.haskell.org/package/base-4.10.0.0/docs/Prelud...
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.