简体   繁体   中英

Why `Concurrently` is not a monad in Haskell?

I'm reading the doc of package async , and trying to find something similar to JavaScript's Promise, and I find Concurrently , which is the most close concept that implemented Functor , Applicative (Promise.all), Alternative (Promise.race). But it doesn't implement Monad (Promise.then), I'm wondering why.

I think it maybe because (>>=) is a sequential operation, which conflict with the name Concurrently , but is this the only reason? is there some more important reason here?

The Monad typeclass states that (<*>) and ap should be equivalent. (<*>) for Concurrently evaluates both the LHS and the RHS at the same time. ap can't evaluate the RHS until the LHS is done, since (>>=) needs to finish evaluating the LHS before it can call the function that gives it the RHS.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM