Внутри монады F #, если вы говорите let!
, компилятор переводит это член Bind
, который вы определили в построителе монады.
Теперь я вижу, что есть монады запросов, так как показано здесь на MSDN, где вы можете сказать:
query {
for student in db.Student do
select student
count
}
и select
и count
, например, будут переведены на QueryBuilder
members Linq.QueryBuilder.Select и Linq.QueryBuilder.Count
.
Мой вопрос в том, является ли это сопоставление ключевых слов членам, связанным с компилятором F #, или же оно расширяемо? Например, могу ли я сказать что-то вроде:
FooMonadBuilder() {
bar
}
и каким-то образом сообщить компилятору F #, что bar
соответствует методу FooMonadBuilder.Bar()
?