实施让! ... 和! ...在自定义计算表达式中
Implementing let! ... and! ... in a custom Computation Expression
我想为此构造添加对我的计算表达式构建器的支持:
let f =
foo {
let! x =
foo {
return 1
}
and! y =
foo {
return 2
}
return x + y
}
编译器说我必须实现 Bind2
或 MergeSource
。但是,我在 the docs.
中找不到它们
这些应该有什么签名?能举个简单的例子吗?
这是一个适用于您的示例的简单构建器:
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
MergeSources
的目的是创建一个结果元组,该元组将由编译器自动解元组。您可能还会发现 this example and 有用。
我想为此构造添加对我的计算表达式构建器的支持:
let f =
foo {
let! x =
foo {
return 1
}
and! y =
foo {
return 2
}
return x + y
}
编译器说我必须实现 Bind2
或 MergeSource
。但是,我在 the docs.
这些应该有什么签名?能举个简单的例子吗?
这是一个适用于您的示例的简单构建器:
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
MergeSources
的目的是创建一个结果元组,该元组将由编译器自动解元组。您可能还会发现 this example and