Size: a a a

2020 January 19

AZ

Alex Zhukovsky in rust_offtopic
проблема в том, что монады нужно комбинировать друг с другом
источник

DS

Doge Shibu in rust_offtopic
Yarila
Всем привет)

Есть вопрос. Объясните те, кто шарит за фп.  Если я правильно понимаю,  одна из опорных концепций фп в том, что большинство кода построено на чистых функциях , а   весь глобал стейт абстрагируется через монады и ты четко знаешь , как этот глобал стейт меняется.  Так вот вопрос, можно ли эмулировать это в ООП языках типо java или c#?  Противоечит ли ООП такой модели и как? Просто вроде в этом чате был разговор о том, что ООП и ФП не противоположны, а ортогональны.   Вспомнилось. Решил разобраться. Заранее извиняюсь, если спрашиваю что-то банальное, очевидное или надоевшее) Просто не могу для себя сделать нужные логические переходы.
ООП не противоречит, как пример, та же скала
источник

С

Слава in rust_offtopic
Yarila
Всем привет)

Есть вопрос. Объясните те, кто шарит за фп.  Если я правильно понимаю,  одна из опорных концепций фп в том, что большинство кода построено на чистых функциях , а   весь глобал стейт абстрагируется через монады и ты четко знаешь , как этот глобал стейт меняется.  Так вот вопрос, можно ли эмулировать это в ООП языках типо java или c#?  Противоечит ли ООП такой модели и как? Просто вроде в этом чате был разговор о том, что ООП и ФП не противоположны, а ортогональны.   Вспомнилось. Решил разобраться. Заранее извиняюсь, если спрашиваю что-то банальное, очевидное или надоевшее) Просто не могу для себя сделать нужные логические переходы.
Наилучший контрпример - библиотека Language.Ext для шарпа. Попробуйте на этом что-нибудь написать, вам очень не понравится. И студия от него вешается.
источник

DS

Doge Shibu in rust_offtopic
Слава
Наилучший контрпример - библиотека Language.Ext для шарпа. Попробуйте на этом что-нибудь написать, вам очень не понравится. И студия от него вешается.
Это проблемы конкретно шарпа и дизайна Language.Ext, но не ООП.

Вон, у той же скалы все более чем нормально
источник

С

Слава in rust_offtopic
Doge Shibu
Это проблемы конкретно шарпа и дизайна Language.Ext, но не ООП.

Вон, у той же скалы все более чем нормально
Так то скала, а то шарпы. Взяли и сделали отдельную скалу, а не библиотеку для явы.
источник

Y

Yarila in rust_offtopic
Всем спасибо за ответы)    

А можно подробней насчёт комбинирования?   В чем боль?
источник

DS

Doge Shibu in rust_offtopic
Слава
Так то скала, а то шарпы. Взяли и сделали отдельную скалу, а не библиотеку для явы.
Через пару версий может и на шарпе будет норм.

Ждём HKT и тайпклассов там
источник

LC

Lone Coder in rust_offtopic
в фп главное - чистые функции, в которых состояние отсутствует как таковое, их плюс в простоте.
источник

LC

Lone Coder in rust_offtopic
подобные функции можно на любом языке писать и тоже получать нечто более простое, не требующее при чтении кода функции думать о каком-то скрытом где-то еще состоянии
источник

LC

Lone Coder in rust_offtopic
А монады, если я правильно понимаю, это костыль для того, чтобы гарантировать определенный порядок выполнения в ленивом языке
источник

DS

Doge Shibu in rust_offtopic
Lone Coder
А монады, если я правильно понимаю, это костыль для того, чтобы гарантировать определенный порядок выполнения в ленивом языке
Не только.

Монады естественным образом появляются в любом ссылочно-прозрачным языке как способ комбинирования значений.
источник

LC

Lone Coder in rust_offtopic
для чего нужно комбинировать значения?
источник

Y

Yarila in rust_offtopic
Я только начинаю вливаться в фп, поэтому глупый наверное вопрос, но всё же, do нотации являются синтаксической абстракцией над комбинированием монад или это вообще про другое?
источник

DS

Doge Shibu in rust_offtopic
Lone Coder
для чего нужно комбинировать значения?
Потому что в ссылочно-прозрачных языках: вся программа - это одно большое значение скомбинированное из мелких.
источник

DS

Doge Shibu in rust_offtopic
Yarila
Я только начинаю вливаться в фп, поэтому глупый наверное вопрос, но всё же, do нотации являются синтаксической абстракцией над комбинированием монад или это вообще про другое?
Да, это просто сахар. При желании можно всегда руками описать через >>=, >> и pure, что делается do нотацией
источник

Y

Yarila in rust_offtopic
Doge Shibu
Да, это просто сахар. При желании можно всегда руками описать через >>=, >> и pure, что делается do нотацией
Спасибо)
источник

С

Слава in rust_offtopic
У ФП нужна ещё и эффективная реализация. Хаскель сделан на thunk'ах, а вот про километровые стектрейсы Scala всем известно, так же, как некоторая тормознутость Scala по сравнению с деревянным кодом на Яве.
источник

DS

Doge Shibu in rust_offtopic
Слава
У ФП нужна ещё и эффективная реализация. Хаскель сделан на thunk'ах, а вот про километровые стектрейсы Scala всем известно, так же, как некоторая тормознутость Scala по сравнению с деревянным кодом на Яве.
Скала тормозит только если пытаться на ней cpu-bound задачи делать полностью в ФП стиле. Но в ней это не обязательно.

На IO-bound задачах все прекрасно работает.
источник

а

а это кто in rust_offtopic
На IO-bound задачах всё прекрасно работает 🤔
источник

Y

Yarila in rust_offtopic
В продолжение про do-нотации. Какие ещё фундаментальные синтаксические конструкции требуются для фп кода?

И если в условном оо языке  (опять же в той же java)  появится синтаксис do-нотаций, с точки зрения формального доказательства можно ли будет написать   фп-код со всеми его преимуществами?

(Тут вроде часто обсуждают фп, но на всякий. Вопросы чисто про ФП не нарушают правила чата?)
источник