Внутри монады F #, если вы говорите let!
, компилятор переводит это в член Bind
, который вы определили в построителе монады.F #: Есть ли способ расширить список ключевых слов монады?
Теперь я вижу, есть монады запросов, а shown here on 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()
?
Не могли бы вы определить соединения с этими расширениями? Я не думаю, что вы можете; просто любопытно. –
Фантастический. С нетерпением ждем прочтения всего этого. Также с нетерпением ждем возможности поиграть с этим атрибутом CustomOperation в монаде, не связанной с запросом, и посмотреть, что произойдет. :) – FSharpN00b
Первое, что я собираюсь сделать с этим, - сделать AI DSL для нового прототипа видеоигр. – gradbot