Этот код:Почему это выражение вычисления 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 # Version 1.9.7.4, компиляция для .NET Framework версии v4.0.21006)
Нет причин, чтобы не делать какие-либо из этих вещей - это всего лишь несколько примеров кода я играл вокруг, и я не мог понять, что ошибка пыталась мне рассказать. Я отправил это сообщение в fsbugs, мы посмотрим, что они скажут. –