Igor
я так и знал
Igor
Ну а зачем тогда все это?..
Doge
Ну а зачем тогда все это?..
Ради параметричности и ссылочной прозрачности же
Doge
И, имхо, именно они и состовляют самые важные части ФП подхода. Всё остальное - вторично и лишь детали реализации их.
Igor
Монадное говно популярно ну просто потому что императивное говно всё ещё правит нашим мозгом
Igor
И, имхо, именно они и состовляют самые важные части ФП подхода. Всё остальное - вторично и лишь детали реализации их.
ФП - это программирование на “чистых функциях” А TF это императивное-монадное-говно (c) Олег
Doge
Монадное говно популярно ну просто потому что императивное говно всё ещё правит нашим мозгом
Ну не монадами едиными. Я стараюсь по максимому свои программы в терминах аппликативов формулировать.
Doge
ФП - это программирование на “чистых функциях” А TF это императивное-монадное-говно (c) Олег
Так у тебя в TF будут самые что ни на есть "чистые" функции. Ссылочная прозрачность, все дела.
Doge
t.me/g0lden_quotes/12
И? Не очень понял к чему.
Igor
И? Не очень понял к чему.
К тому что TF - это императвное говно, для тех кто не осилил ФП архитектуру
Doge
Он сильно шире F[_]
Igor
Ты не правильно TF понимаешь, как мне кажется.
В любом случае это “интерпретатор” для импративного 💩
Doge
В любом случае это “интерпретатор” для импративного 💩
Ок, а аппликативы или стрелки для тебя тоже императивное?
Doge
Ничто не мешает с помощью TF программы в их терминах формулировать.
Doge
(Ну, если задача вообще в них выразима)
Igor
Ок, а аппликативы или стрелки для тебя тоже императивное?
Не знаю что за стрелки, но даже Олег с этим согласен, о чем мы тут тогда спорим
Doge
Не знаю что за стрелки, но даже Олег с этим согласен, о чем мы тут тогда спорим
Мне скорее интересно, чем для тебя монады - императивщина. Тем, что явно порядок вычислений ими задается?
Igor
Doge
Ну такое, Eta я даже не смог запустить, а скала - это джава с hkt (change my mind)
И да, если твоими доводами оперировать, то и хаскель - это джава с hkt, т.к. там повсюду тот же TF + MTL стиль, монады и т.д. и т.п.
Doge
Да и какая разница, Дегоуз все равно убил TF
Ничего он не убил. Его ZIO - TF никак не противоречит. А уж иньекция зависимостей через reader + "кейк паттерн" - вообще так себе идея.
Igor
И да, если твоими доводами оперировать, то и хаскель - это джава с hkt, т.к. там повсюду тот же TF + MTL стиль, монады и т.д. и т.п.
Ну комон, в хачкеле lazy + pure семантика. Про scala (aka bete java) такое ну никак нельзя сказать
Doge
Что он тоже java с hkt
Doge
(Он ещё как strict)
Igor
Что он тоже java с hkt
Хм, но он же пьюрный 🤔
Igor
Как и ELM
Igor
Короче Elm больше FP чем скала 🌚
Doge
Хм, но он же пьюрный 🤔
Ну в скале ради пьюрности - надо просто следить, чтобы всякая грязь вне твоего SyncIO/IO/Task/ZIO/Eval не происходила.
Doge
Так что он не супер чище скалы, просто дефолты чуть другие
Doge
Да, в скале нужна дисциплина, чтобы писать в ФП стиле и его поддерживать. Но и в тех же хаскелях, пьюрскриптах и т.д. - она точно так же нужна, пусть и в меньшей форме
Igor
Так что он не супер чище скалы, просто дефолты чуть другие
> просто дефолты Вот дефолты matter Короче clojure/f# больше FP чем скала, тк дефолты на программирование функциями важнее, чем наличие HKT/имлиситов
Igor
Scala это (better) java с HKT
Doge
Но при этом в плане возможности выражения ФП абстракций на порядок остают
Doge
(Если не на несколько порядков)
Андрей
Ребята, надо слезать с MS стека, ну рили
И когда это ты фарш от М$ отделил? слез он
Doge
Даже без тех же тайпклассов (или хоть сколько-то полноценной их эмуляции) жуть как в F# больно.
Igor
Короче не надъ на ваших TF, нам Дегоуз завезет ZIO https://twitter.com/jdegoes/status/1100801663412129793?s=19
Doge
Короче не надъ на ваших TF, нам Дегоуз завезет ZIO https://twitter.com/jdegoes/status/1100801663412129793?s=19
TF - не только и не сколько для эффектов, опять повторюсь. Оно в большей степени для модульных и расширяемых интерпретаторов (программ)
Igor
Даже без тех же тайпклассов (или хоть сколько-то полноценной их эмуляции) жуть как в F# больно.
Ноуп, реальность в том что мы пишем мономорфный код, а для эффектов хватает и Async<T>
Igor
И при этом мы обходимся без классов/объектов
Doge
Ноуп, реальность в том что мы пишем мономорфный код, а для эффектов хватает и Async<T>
Ну такое себе. Может раз уж код мономорфный, то и от дженериков отказаться?
Doge
И вообще на го перейти?
Igor
И когда это ты фарш от М$ отделил? слез он
Лол, тут скорее MS от него отделилось
Doge
Ноуп, реальность в том что мы пишем мономорфный код, а для эффектов хватает и Async<T>
И да, мономорфный код другую важную вещь теряет - параметричность же. Типы в таком случае дают сильно меньше информации о программе и не могут в той же степени облегчить её написание. (Да, в полную силу параметричность акутальна только для яп с зав типами и проверяемой тотальностью, но и в ослабленном варианте всё равно очень многое дает)
Igor
Ну может быть, но то что показывал Олег и Дегоуз - это просто императивне говно уровня C#, которое благодаря TF вдруг становится ФП НЕ говном (на самом деле нет)
Vasily
Кстати, объясните мне термин "алгебра", раз уж вы в теме все
Igor
Кстати, объясните мне термин "алгебра", раз уж вы в теме все
Ну это тоже самое что DI - те закрыл чтение из базы интерфейсом и думаем что все ОК
Doge
Ну это тоже самое что DI - те закрыл чтение из базы интерфейсом и думаем что все ОК
Это ты мне, наверное, хотел про императивность ответить?
Igor
Нет, но монады это есть императивное програмирование, а TF/Free это “закрытие их интерфесом”
Doge
Нет, но монады это есть императивное програмирование, а TF/Free это “закрытие их интерфесом”
А что такое императивное программирование? В чём смысл императивности?
Igor
Просто TF более JVM-like абстракция (по перформансу и тп)
Doge
Что ты под этим термином подразумеваешь?
Igor
Ага, то-то TF в хаскеле появился.
Вот в этом я сомневаюсь, тк Олег говорил что это scala-way
Igor
В каком-то виде может быть, но про TF в haskell точно никто не говорит, как валидный подход
Doge
Igor
Тебе сюда: http://okmij.org/ftp/tagless-final/index.html
А можно пейпер Киселева
Igor
Doge
В каком-то виде может быть, но про TF в haskell точно никто не говорит, как валидный подход
Просто для того, что под TF сейчас обычно понимают в скале - в хаскеле сложилось другое название. См. тот же mtl style. Когда функции описываются в терминах не конкретной монады, а типа высшего порядка с наложенными на него ограничениями типа MonadReader, MonadError и т.д. и т.п. Это один-в-один - TF из скалы.
Doge
И да, ты так про императивность и не сказал.
Doge
Что ты под этим термином понимаешь
Igor
ОК, давай по другому. Почему Фомкин не прав? t.me/fsharp_flood/61585
Doge
ОК, давай по другому. Почему Фомкин не прав? t.me/fsharp_flood/61585
Потому что в отличие от аналогичных джавовых подходов - тут полностью сохраняется ссылочная прозрачность. (+ в большей степени есть параметричность) И да, скажи, что ты понимаешь под термином "императивность"?
Igor
Doge
Ты пишешь весь код внутри монады, как это можно называть функциональным
Потому что все функции у меня ссылочно прозрачные в итоге. Неконтролируемых побочных эффектов нет
Igor
Потому что все функции у меня ссылочно прозрачные в итоге. Неконтролируемых побочных эффектов нет
И как ты их подменяешь? Другим интерпретатором. Чем это отличается от моканья и DI?.. (особенно в скале где нет ссылочной прозрачности)
Doge
И как ты их подменяешь? Другим интерпретатором. Чем это отличается от моканья и DI?.. (особенно в скале где нет ссылочной прозрачности)
Ссылочной прозрачности можно добиться везде, было бы желание. Это не свойство языка, это свойство конкретной функции.
Doge
И как ты их подменяешь? Другим интерпретатором. Чем это отличается от моканья и DI?.. (особенно в скале где нет ссылочной прозрачности)
И да, я бы мог везде в своих рассуждениях сейчас заменить скалу на хаскель. Получается, по твоему мнению, хаскель - это тоже джава с hkt? Т.к. там работы с монадами ещё больше и она ещё шире распространена. Ответь вот на этот вопрос.
Igor
И да, что ты под императивностью понимаешь. Скажи мне уже
Блет, это когда ты в функции миксуешь эффекты и логику. TF это тот же ООП с DI
Igor
Кстати, объясните мне термин "алгебра", раз уж вы в теме все
Советую почитать статьи Марка на тему фри-монад. Написать что-то с фримонадами на F# и понять что это тоже самое C# говно с DI и забыть на это. (а TF это то же самое, только с боку и scala-specific)