gpt4 book ai didi

f# - 选择 <'T1,' T2> 上的一元操作

转载 作者:行者123 更新时间:2023-12-04 18:19:48 26 4
gpt4 key购买 nike

我找不到对象 choice在标准库中,这允许我编写

let safeDiv (numer : Choice<Exception, int>) (denom : Choice<Exception, int>) =
choice {
let! n = numer
let! d = denom
return! if d = 0
then Choice1Of2 (new DivideByZeroException())
else Choice2Of2 (n / d)
}

就像在 Haskell 中一样。我是否遗漏了什么,或者是否有第三方库可以编写这类东西,或者我必须重新发明这个轮子?

最佳答案

Choice<'a,'b> 没有内置的计算表达式。类型。一般来说,F# 没有内置的常用 Monad 计算表达式,但它确实提供了一种相当简单的方法来自己创建它们:Computation Builders。 This series是一个关于如何自己实现它们的好教程。 F# 库通常有一个 bind定义的函数可用作计算生成器的基础,但它没有用于 Choice 的函数类型(我怀疑是因为 Choice 有很多变体)。

根据您提供的示例,我怀疑 F# Result<'a, 'error> type 实际上更适合您的场景。有一个code-review几个月前,一位用户发布了 Either计算生成器,如果您想利用它,接受的答案有一个相当完整的实现。

关于f# - 选择 <'T1,' T2> 上的一元操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51521889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com