Комментарии 13
> типы данных, возвращаемых f1 и f2, не соответствуют типам параметров f2 и f3
почему?
почему?
Не нашел монад в коде %)
А взорваться в исключении будет не дешевле? Что-то типа
try:
return john.get_boss().get_wage()
except AttributeError:
return None
Ну, это же учебный пример. Автор, наверное, использовал бы исключения, если бы не стояла задача обобщить это решение с предыдущими двумя.
А если это исключение вылетит во время расчетов в get_wage() по какой-то другой причине?
Во-первых, спасибо автору, наконец-то начало проясняться(= И правильно понимаю, что в первых двух примерах достаточно расширить структуру входных параметров (принимать тоже кортеж и объект с полем-агрегатором промежуточных состояний) и не усложнять введением синтетичеких методов?
Как я понял предмет, монада − это такой способ объединения функций в цепочку, когда мы их входной и выходной типы данных продвигаем до такого типа, который будет обратно совместим с ними обоими. Для этого, естественно, нам нужны две дополнительные функции.
И правильно понимаю, что в первых двух примерах достаточно расширить структуру входных параметровТогда мы не сможем переиспользовать код f1, f2 и f3, а ведь это было нашей главной задачей.
bind(f4, bind(f3, ... ))
Полагаю должно быть bind(bind( ... , f3), f4)
Прошу прощения, что под старым постом, но я же на него наткнулся в 2022, может наткнётся кто-то ещё.
Мне не показалось, что монадический тип может быть попросту перечислимым, типа
string | number | bool[]
?
По крайней мере, в некоторых случаях.
Что-то очень похожее на Лисп(CommonLisp).
Только вот имеет ли смысл изобретать то что уже было?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Монады за 15 минут