Здравствуйте, gandjustas, Вы писали:
G>Понятность — очень субъективный параметр. Зависит от исключительно от предыдущего опыта писания.
Не могу согласиться. Объективно некоторые вещи простые, некоторые сложные.
G>Во вторых, запишем выражение по другому:
G>G>from v1 in a
G>from v2 in f(v1)
G>select g(v1, v2)
G>
G>И никакие переопределения операторов не помогут разрулить.
Почему? Вот вариант без страхолюдства с select и from:
g(a, f(a));
ARK>>Ну и самое главное — на этом примере уменьшения количества писанины не видно...
G>Странно что не видно...
G>Если ты не заметил, то для "ручного" варианта надо в каждом методе, оперирующим Maybe<T> проверять что есть значение (копипастить код).
Я заметил, что код точно так же копипастится и в двух других случаях — во втором два вызова Bind, в третьем два from-in. И в них точно так же легко ошибиться:
return from v1 in a
from v2 in a
select v1+v2;
Опять же, оставив вопрос копипасты — количество кода с монадами меньше не стало.