在 F# monad 中,如果您使用
现在我看到有查询 monads,如 在 MSDN 上显示,您可以这样说:
let!
,编译器会将其转换为您在 monad builder 上定义的 Bind
成员。现在我看到有查询 monads,如 在 MSDN 上显示,您可以这样说:
query {
for student in db.Student do
select student
count
}
例如,select
和 count
将被翻译为 QueryBuilder
成员 Linq.QueryBuilder.Select 和 Linq.QueryBuilder.Count
。
我的问题是,这些关键字到成员的映射是硬编码到 F# 编译器中的,还是可扩展的?例如,我能否像下面这样说:
FooMonadBuilder() {
bar
}
并且要以某种方式告诉F#编译器,bar
对应于FooMonadBuilder.Bar()
方法?