Как стать автором
Обновить

Комментарии 13

> типы данных, возвращаемых f1 и f2, не соответствуют типам параметров f2 и f3
почему?
Спасибо, что нашли мою ошибку. Я пропустил кусочек первоисточника с текстом f1, f2 и f3. Поправил.
Не нашел монад в коде %)
Не хотите объяснить свою точку зрения?
А взорваться в исключении будет не дешевле? Что-то типа

try:
    return john.get_boss().get_wage()
except AttributeError:
    return None
Ну, это же учебный пример. Автор, наверное, использовал бы исключения, если бы не стояла задача обобщить это решение с предыдущими двумя.

А если это исключение вылетит во время расчетов в get_wage() по какой-то другой причине?

Отлавливать в get_wage отлавливаемые и рэйзить свои, которые ловить в верхнем try
Во-первых, спасибо автору, наконец-то начало проясняться(= И правильно понимаю, что в первых двух примерах достаточно расширить структуру входных параметров (принимать тоже кортеж и объект с полем-агрегатором промежуточных состояний) и не усложнять введением синтетичеких методов?
Как я понял предмет, монада − это такой способ объединения функций в цепочку, когда мы их входной и выходной типы данных продвигаем до такого типа, который будет обратно совместим с ними обоими. Для этого, естественно, нам нужны две дополнительные функции.

И правильно понимаю, что в первых двух примерах достаточно расширить структуру входных параметров
Тогда мы не сможем переиспользовать код f1, f2 и f3, а ведь это было нашей главной задачей.

bind(f4, bind(f3, ... ))

Полагаю должно быть bind(bind( ... , f3), f4)

Прошу прощения, что под старым постом, но я же на него наткнулся в 2022, может наткнётся кто-то ещё.
Мне не показалось, что монадический тип может быть попросту перечислимым, типа

string | number | bool[]

?

По крайней мере, в некоторых случаях.

Что-то очень похожее на Лисп(CommonLisp).

Только вот имеет ли смысл изобретать то что уже было?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории