f# - 为什么这个 F# 计算表达式会给出警告?

标签 f# computation-expression

这段代码:

type Result = Success of string

type Tracer() =
  member x.Bind(p: Result, rest: (string -> Result)) = 
    match p with
    | Success s -> rest s

let tracer = new Tracer()

let t = tracer {
  let! x = Success "yes!"
  let! y = Success "waste of time"
  return! Success x
}

printfn "%A" t

打印成功“是!”

但是给出一个暗示它不应该工作的警告:

File1.fs(19,3):警告 FS0708:只有在计算表达式构建器定义了“ReturnFrom”方法时,才能使用此控制构造

似乎是一个奇怪的警告:如果它是正确的,那么代码不应该工作。真的只是说builder要合成ReturnFrom吗?

(F# 版本 1.9.7.4,编译为 .NET Framework 版本 v4.0.21006)

最佳答案

我将问题发送到 fsbugs@microsoft.com,这是一个错误。他们说下个版本会出错。

(他们几乎立即做出了回应,感恩节也同样如此——我只是花了一段时间才把信息放在这里。)

关于f# - 为什么这个 F# 计算表达式会给出警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1800696/

相关文章:

debugging - 如何在 F# 交互中使用断点?

f# - 在 F# 中将多个枚举值分配给属性的语法是什么?

asynchronous - 从 C# 调用非异步 Func<T> 返回 F# 函数中的启动 Async<T>?

f# - 如何编写一个计算表达式构建器来累积一个值并允许标准语言构造?

.net - 为什么我在 mono 上收到此消息? "warning FS0191: Could not determine highest installed framework version...".NET”

f# - 如何在 FsUnit 的断言中忽略有区别的联合案例的值(value)?

f# - 无法使用 ApiaryTypeProvider 构建 F# 项目。找不到 FSharp.Data.DesignTime

exception-handling - 如何在 F# 任务计算表达式中的每个步骤上实现非嵌套异常处理?

.net - 何时在计算表达式中实现 `Zero` 成员?

f# - 如何更改 Rx Builder 实现来修复堆栈溢出异常?