Этот код:
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)