【发布时间】:2021-01-04 16:40:41
【问题描述】:
Functional Programming in C++ 在第 10.5.2 节中显示了 expected<T,E> monad,它与 Haskell 的 Either 相同。
到目前为止一切顺利。
然后,在第 10.5.3 节中,它声称显示 Try monad,或者至少这是该节的标题。
在这个“monad”中,只显示了一个函数,而不是mbind,它被称为mtry,它接受的输入不是值,它被包裹在“ try monad”,而是一个函数,它在运行时可以返回一个值或抛出一个异常,然后每个函数都被适当地包装在 expected monad 中。
所以如果我误解了作者的观点,除了我之外,大多数读者都清楚,或者这个标题真的具有误导性。
【问题讨论】:
-
Try似乎只是通过将其包装在一个函数中来推迟效果(展开调用堆栈)。这就像你有一个可变数据类型并且只是推迟突变:这样的计算仍然可以运行它们时有害。
标签: c++ functional-programming try-catch monads