问题描述
我有一个 'state -> 'event -> Result<'state * 'result,'error>
类型的函数。我有一个起始 'state
和 'event list
。
如果所有折叠都没有问题,或者第一个错误,我想折叠事件并获得最终状态和产生的结果列表。
我可以写一个计算表达式或为它折叠,但想知道这个模式是否有一个名字?我可以使用 FSharpPlus 开箱即用的东西吗?看起来很像状态 monad,但是状态和结果都包裹在 Result
类型中,所以它有点像状态 + 结果 monad?
解决方法
正如@carsten 已经指出的那样,您在 F#+ 中有 **Gradle sync failed: Unsupported class file major version 60**
可用
你有:
StateT
现在让我们交换一些参数:
'state -> 'event -> Result<'state * 'result,'error>
可以表示为
'event -> 'state -> Result<'result * 'state,'error>
在当前 F#+ StateT 编码中。
所以,让我们调用您的函数 StateT<'state,Result<'result * 'state,'error>
并假设您有 f
,它是一个 events
(或实际上任何其他可遍历的事件结构),现在您可以这样做:
list<'event>