为什么“同时”在Haskell中不是单子?

luo*_*990 4 monads concurrency haskell promise

我在读包的文档异步,并试图找到类似于JavaScript的承诺的东西,我觉得Concurrently,这是最贴近的概念,实现FunctorApplicative(Promise.all),Alternative(Promise.race)。但是它没有实现Monad(Promise.then),我想知道为什么。

我认为这可能是因为(>>=)是顺序操作,与名称冲突Concurrently,但这是唯一的原因吗?这里还有更重要的原因吗?

Jos*_*ica 5

Monad类型类的规定,(<*>)并且ap应该是等价的。(<*>)用于同时Concurrently评估LHS和RHS。在完成LHS之前,ap无法评估RHS,因为(>>=)需要先完成对LHS的评估,然后才能调用赋予其RHS的函数。

  • 我想我明白了。这些法则,例如“ pure = return”和“(&lt;*&gt;)= ap”,保证了某些特定数据的“ Applicative”和“ Monad”实例具有相同的语义。 (3认同)