sdg*_*sdh 5 f# computation-expression
我想为我的计算表达式构建器添加对此构造的支持:
let f =
foo {
let! x =
foo {
return 1
}
and! y =
foo {
return 2
}
return x + y
}
Run Code Online (Sandbox Code Playgroud)
编译器说我必须实现Bind2
or MergeSource
。但是,我在文档中找不到它们。
这些应该有什么签名?你能举一个简单的例子吗?
这是一个适用于您的示例的简单构建器:
type Foo<'t> = MkFoo of 't
type FooBuilder() =
member _.Bind(MkFoo x, f) = f x
member _.Return(x) = MkFoo x
member _.MergeSources(MkFoo x, MkFoo y) = MkFoo (x, y)
let foo = FooBuilder()
let f =
foo {
let! x = foo { return 1 }
and! y = foo { return 2 }
return x + y
}
printfn "%A" f // output: MkFoo 3
Run Code Online (Sandbox Code Playgroud)
的目的MergeSources
是创建一个由编译器自动解元组的结果元组。您可能还会发现这个例子和这个问题很有用。