В настоящее время я изучаю F # и натыкаюсь на несколько камней преткновения; Я думаю, что многое из этого заключается в том, чтобы научиться мыслить функционально.
Одна из вещей, которую я изучаю в данный момент, — это вычислительные выражения, и я хочу иметь возможность определить вычислительное выражение, которое обрабатывает некоторое состояние отслеживания, например:
let myOptions = optionListBuilder {
let! opt1 = {name="a";value=10}
let! opt2 = {name="b";value=12}
}
Я хочу, чтобы myOptions
было Option<'T> list
, поэтому каждая операция привязки let!
эффективно заставляет сборщика «отслеживать» определенные параметры по мере их продвижения.
Я не хочу делать это, используя изменяемое состояние - например. наличие списка, поддерживаемого разработчиком и обновляемого при каждом вызове bind
.
Есть ли какой-то способ получить это так, чтобы это было возможно?
Обновление: результирующий тип Option<'T> list
является просто репрезентативным, на самом деле у меня, вероятно, будет тип OptionGroup<'T>
, содержащий список, а также некоторую дополнительную информацию, поэтому, как Даниэль упомянул ниже, я мог бы использовать понимание списка для простого списка.
Option
, так как один из них уже существует в языке. Может быть,OptionWithItem
или что-то в этом роде. Во-вторых, если у вас есть ответ, вы должны опубликовать его вместе с другими ответами. Вы по-прежнему можете отметить тот, который помог вам добраться туда, как ответ, но он по-прежнему четко отделяет вопрос от ответа. - person N_A   schedule 12.12.2014