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

时间:2019-05-08 02:18:23

标签: haskell concurrency promise monads

我正在阅读软件包async的文档,并试图找到与JavaScript的Promise类似的东西,我发现Concurrently是实现Functor的最紧密的概念, Applicative(Promise.all),Alternative(Promise.race)。但是它没有实现Monad(然后,Promise。),我想知道为什么。

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

1 个答案:

答案 0 :(得分:5)

The Monad typeclass指出(<*>)ap应该相等。 (<*>)的{​​{1}}同时评估LHS和RHS。 Concurrently在完成LHS之前无法评估RHS,因为ap需要先完成对LHS的评估,然后才能调用为其赋予RHS的函数。