2009-11-25 209 views
3

此代码:这个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)

回答

6

我把问题发送到[email protected],这是一个错误。他们表示这将是下一个版本的错误。

(他们回答几乎是立刻,在感恩节没少 - 它只是花了一段时间把这里的信息。)

4

我很惊讶,这个工程。 Section 6.10 of the spec在未指定时未提及有关合成ReturnFrom的任何内容。有没有理由不把member x.ReturnFrom v = v放在建造者身上?或member x.Return(v) = Success v,以便您可以结束您的tracer块与return x,这将更传统?

+0

没有理由不去做那些事 - 这只是一些示例代码,我被打在附近,我无法理解错误是想告诉我什么。 我把这封邮件寄给fsbugs,我们会看到他们要说的。 – 2009-11-26 18:12:54

相关问题