在我试图实现的计算表达式下方。该值被包装在一个元组中,其中元组的第二项是一个字符串列表,表示沿途的日志条目。
type LoggerBuilder() =
member this.Bind(vl : 'a * string list, f) =
let value = vl |> fst
let logs = vl |> snd
let appendLogs logs tpl =
let value = vl |> fst
let log = vl |> snd
(value, logs |> List.append log)
(f value) |> appendLogs logs
member this.Return(x) =
(x, [])
但是,当我运行以下命令时,我没有得到预期的结果。我想知道我错过了哪里。
let log = new LoggerBuilder()
let a = log {
let! a = (1, ["assign 1"])
let! b = (2, ["assign 2"])
return a + b
}
// Result:
val a : int * string list = (1, ["assign 1"; "assign 1"])
// Expected:
val a : int * string list = (3, ["assign 1"; "assign 2"])
更新
为避免此错误,请将 传递给或--warnon:1182
的命令提示符。这将对未使用的“变量”发出警告。fsi
fsc