Size: a a a

2021 April 13

R

Rafael in ФП
Для Maybe и так и так же будет работать. Только bind пару раз лишний раз вызовется 🤔
А для других монад сломается?
источник

JS

Jerzy Syrowiecki in ФП
отличие как раз в лишних разах. этих лишних разов может быть в общем случае очень много, вплоть до бесконечности
источник

JS

Jerzy Syrowiecki in ФП
для других монад не сломается, потому что результат должен совпадать.

я в том сообщении неправильно выразился. на монадность порядок применения биндов не влияет, просто если их не вкладывать друг в друга, теряется вся польза от монады
источник

R

Rafael in ФП
Понял, спасибо 👍
источник

АГ

Александр Гранин... in ФП
Скорее даже если использовать fluent interface (вызов bind через точку), то это неполноценный bind. Он умеет меньше, чем настоящий, с лямбдами и вложением. Через настоящий bind с лямбдами и вложением можно выразить те же случаи, которые выражаются через fluent interface, но не наоборот.

Я в полный рост эту проблему осознал, когда делал монады на C++ (STM, Parser, Maybe). Если у тебя есть правильный bind с типом как в Haskell

bind :: m a -> (a -> m b) -> m b

То всё остальное делается из него: fmap, ap, всякие sequence, mapM и прочее. Но если у тебя есть только fluent interface, то многих этих функций, в общем их виде, ты выразить не можешь
источник

АГ

Александр Гранин... in ФП
А вот это:

m.binf(f).bind(g).bind(h)

в лучшем случае функтор, но не монада
источник

SB

S B in ФП
очень надеюсь, что вы инлайните эти методы
источник

АГ

Александр Гранин... in ФП
Кстати, а что там с дядей Бобом, который хотел подучить ФП? Когда-то мне мои бывшие коллеги говорили в 2012-14 годах: мол, дядя Боб собрался писать книгу по ФП, и она будет крутая, и вот тогда поговорим, а пока не лезь к нам со своим ФП
источник

SB

S B in ФП
дядя Боб и примеры на Скале даже показывал же
источник

АГ

Александр Гранин... in ФП
Он, вроде, был приверженцем Кложи?
источник

SB

S B in ФП
И говорил -- "подумаешь, Хаскель, язык программирования как язык программирования"
источник

DK

Daniil Kostin in ФП
всмысле? не совсем уверен, что я понимаю инлайните правильно
источник

АГ

Александр Гранин... in ФП
Ну с этим-то я согласен. Необычный и с уникальными фичами, но зачем считать его каким-то совсем языком не от мира сего (или богами посланным)
источник

АГ

Александр Гранин... in ФП
Вон же есть OCaml и F#
источник

SB

S B in ФП
в момент компиляции или другой трансформации кода можно "заинлайнить метод", т.е. вместо полноценного вызова функции и аллокации стэктрейса со всеми вытекающими, инструкции метода будут "заинлайнены" вместо вызова функции.
источник

АГ

Александр Гранин... in ФП
Мемоизация?
источник

АГ

Александр Гранин... in ФП
Инлайнинг немного другое все ж
источник

SB

S B in ФП
так я не против, просто из уст дяди Боба с его "Клин кодом" звучало крайне неестественно.
источник

АГ

Александр Гранин... in ФП
Меня сбивает с толку "вместо вызова функции". Вместо вызова может быть только подставлен результат, это ключевое требование referrential transparency
источник

SB

S B in ФП
Мемоизация это накопление сделанных вычислений в какой-то, желательно очень быстрой, памяти, чтобы потом не повторять уже сделанные вычисления. я ее так понимаю во всяком.
источник