f# - 实现让!... 和!...在自定义计算表达式中
问题描述
我想为此构造添加对我的计算表达式构建器的支持:
let f =
foo {
let! x =
foo {
return 1
}
and! y =
foo {
return 2
}
return x + y
}
编译器说我必须实现Bind2
or MergeSource
。但是,我在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
推荐阅读
- c# - 在c#中区分相同类型的对象以进行检索、比较等的方法是什么
- android - 尝试构建到 android 设备时出错“找不到 com.android.support”
- php - 如何根据mysql查询结果php而不是css隐藏下拉菜单中的元素
- reactjs - 下一个路由器:如何访问多个查询参数?
- twig - 我将如何添加 Twig 功能
- haskell - Haskell 如何评估这个签名?
- python - 用逗号在同一行中打印多个值
- ios - 如何在 Safari for ios 中捕获 selectionStart 和 selectionEnd?
- python - 两个数据帧的所有组合
- c++ - 调试错误:变量“cardDesc”周围的堆栈已损坏