Внутри монады F#, если вы скажете let!
, компилятор преобразует это в член Bind
, который вы определили в построителе монады.
Теперь я вижу монады Query, как показано здесь, в 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()
?