这个F#计算表达式为什么会给出警告?
问题描述:
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'方法
看起来像一个奇怪的警告:如果它是正确的,那么代码不应该工作。这真的只是说建设者必须综合ReturnFrom吗?
(F#版本1.9.7.4,编译为.NET Framework版本v4.0.21006)
答
我很惊讶,这个工程。 Section 6.10 of the spec在未指定时未提及有关合成ReturnFrom
的任何内容。有没有理由不把member x.ReturnFrom v = v
放在建造者身上?或member x.Return(v) = Success v
,以便您可以结束您的tracer
块与return x
,这将更传统?
没有理由不去做那些事 - 这只是一些示例代码,我被打在附近,我无法理解错误是想告诉我什么。 我把这封邮件寄给fsbugs,我们会看到他们要说的。 – 2009-11-26 18:12:54