我正在阅读软件包async的文档,并试图找到与JavaScript的Promise类似的东西,我发现Concurrently
是实现Functor
的最紧密的概念, Applicative
(Promise.all),Alternative
(Promise.race)。但是它没有实现Monad
(然后,Promise。),我想知道为什么。
我认为可能是因为(>>=)
是一个顺序操作,与名称Concurrently
冲突,但这是唯一的原因吗?这里还有更重要的原因吗?
答案 0 :(得分:5)
The Monad
typeclass指出(<*>)
和ap
应该相等。 (<*>)
的{{1}}同时评估LHS和RHS。 Concurrently
在完成LHS之前无法评估RHS,因为ap
需要先完成对LHS的评估,然后才能调用为其赋予RHS的函数。