为什么 std::expected 中没有单子运算?

Why are there no monadic operations in std::expected?

提问人:Desmond Gold 提问时间:2/9/2022 更新时间:1/27/2023 访问量:1077

问:

在 C++23 中,采用了 中的一元运算,后来又采用了 .为什么像 、 这样的一元运算没有包含在正文中?std::optionalstd::expectedand_thentransformor_else

C++ C++23 标准预期

评论

1赞 vandench 2/9/2022
我认为他们在最新提案的第 11.2 节中涵盖了这一点。
0赞 Nicol Bolas 2/9/2022
被 C++23 采用?expected
3赞 Barry 2/9/2022
@NicolBolas 是的,截至昨天。
0赞 Moia 8/24/2022
同时,确实存在启用了 monadic 的实现:github.com/TartanLlama/expected

答:

5赞 Barry 2/9/2022 #1

更新:在 C++23 中将有 monadic 操作。std::expected


这个提议很老了。采用的修订版是P0323R12,这已经表明它的寿命很长,但该论文甚至早于 P 编号系统,并以 N4015 开始,日期为 2014 年 5 月。std::expected

我之所以提出这个问题,是因为即使就其本身而言,也花了很长时间才能完成整个过程。相比之下,纸张的单子运算仅在 2017 年 10 月首次出现。从那时起,就要走很长一段路。std::expectedstd::optionalstd::expected

有一篇论文提出了 的一元运算,这是P2505R0,但在这一点上它非常不完整,需要大量的工作。C++ 新特性的设计窗口已关闭,但如果以后有 NB 注释要求它,我不会感到惊讶。std::expected

至少我们终于有了.std::expected


几个月后来到这里,有一条 NB 评论要求 monadic 运算符于 2022 年 11 月在科纳为 C++23 采用P2505R5std::expected

评论

1赞 Nicol Bolas 9/26/2022
就其价值而言,P2505 似乎正在走上 C++23 的轨道。至少,LWG似乎愿意考虑将其用于C++23。
0赞 Ben 1/27/2023
看起来没有.这似乎是可取的。还是处理好了?.transform_error.or_else
1赞 Barry 1/27/2023
@Ben 有一个现在。就像我说的,那篇论文的R0非常不完整。transform_error