gpt4 book ai didi

f# - 如何最好地捕获失踪让!,做!,返回和返回!在 F# 中的计算表达式中

转载 作者:行者123 更新时间:2023-12-04 06:40:01 24 4
gpt4 key购买 nike

我喜欢计算表达式,但我会犯一些简单的错误,比如忘记 return 关键字或 !在诸如 let! 之类的表达式上然后返回!,或者我只是忘记写 do!。这在状态 monad 中经常发生,在这种情况下,我倾向于忘记状态,而只关注我定义的 monadic 运算符。

我有时会确保我的 monadic 运算符返回一个“monad 类型”而不是“匿名”函数的类型。这有助于跟踪我健忘的打字,但并不理想。有人有更好的技巧吗?

最佳答案

给定一个典型的 monad,如果您缺少 !,您的代码不应编译在关键字之后,因为类型不起作用。例如:

let sum = async {
let x = async { return 1 }
let y = async { return 2 }
return x + y
}

这不会编译,因为您试图添加两个 Async<int> s,但如果您更改 let 它将编译转至 let! s。

同样,识别缺失 return s,只需注意编译器警告消息和奇怪的 monadic 类型:
let sum = async {
let! x = async { return 1 }
let! y = async { return 2 }
x + y // warning FS0020
}

在这种情况下, sumAsync<unit> ,当您尝试在代码的其他地方使用它时,这应该很明显。或者,您可以使用类型注释立即捕获此问题:
let sum : Async<int> = async { // error FS0001: type mismatch
let! x = async { return 1 }
let! y = async { return 2 }
x + y // warning FS0020
}

关于f# - 如何最好地捕获失踪让!,做!,返回和返回!在 F# 中的计算表达式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4379124/

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