Я пытаюсь понять, как работают строители F #. Поэтому для экспериментов я придумал следующий пример.
type failSafeSeq() =
member this.For(seq, mapFunction) = seq |> Seq.map mapFunction
member this.Yield(yieldExpr) = yieldExpr
member this.YieldFrom(yieldBang) = yieldBang
member this.Combine(a, b) = Seq.append a b
member this.Delay(delayFun) = delayFun()
member this.Zero() = Seq.empty
let failSafe = new failSafeSeq();
let rec allFilesSeq dir =
failSafe { for file in Directory.EnumerateFiles(dir) do yield file
for subdir in Directory.EnumerateDirectories dir do yield! (allFilesSeq subdir) }
При использовании приведенного выше кода компиляция завершается с ошибкой «(allFilesSeq subdir)» с сообщением об ошибке:
This expression was expected to have type string but here has type seq<string>
Я пробовал множество различных заклинаний, чтобы исправить эту ошибку, но безуспешно. Чего мне не хватает?