Alexander
так что может в середине статьи у меня бы были ещё какие прозрения
Евгений
Мне казалось, что фишки эффектов всяких это коммутативность и возможность более сложные взаимосвязи строить
Ilya
да, кстати, по поводу изоморфности: вроде же не любая монада алгебраический эффект
Евгений
А в популярных хаскелилибах либо тупой стек, либо "умный", умеющий добраться до первого слоя нужного вида
Ilya
https://stackoverflow.com/questions/31335805/monad-transformers-more-powerful-than-effects-examples
Alexander
Не используйте Eff в PureScript. Его, во-первых, выпилили, во вторых это больше мешает, чем помогает. Не помогает от слова совсем. freer от Intakt страдает тем же. Да и вообще, расширяемые эффекты - зло
Alexander
Может, с математической точки зреия они и норм, но не практичны ни разу.
кана
в любом случае вынести какой-то список команд в эффект/монаду и указать, что в этом коде у тебя вот этот эффект (MonadDB, MonadState), и потом мокать конкретные эффекты
Leonid 🦇
ITT меряются школами
Alexander
mtl это хорошо
A64m
только мокать MonadDB замучаешься, надо что-то поконкретнее
Vladislav
Это нормально.
все пишем в ReaderT IO, мокать ничего не нужно, так Снойман сказал
Leonid 🦇
Ну если у тебя в ReaderT лежит рекорд функций
Alexander
Эффекты ортогональны моканию
A64m
все пишем в ReaderT IO, мокать ничего не нужно, так Снойман сказал
тут уже можно сказать, что и ридер не нужен
Vladislav
я говорю как Снойман сказал, не надо спорить с умным человеком
Vladislav
и какое-то свое мнение или подходы придумывать, он придумал уже
Alexander
Точнее, IoC/DI
Alexander
и какое-то свое мнение или подходы придумывать, он придумал уже
Я полагаю, я тоже кое-что придумал. А скорее, скомпилиррвал
Alexander
Но до Сноймана, конечно, далеко
Vladislav
что ты там придумал, все программирование Снойман уже сделал в своих TH-макросах к Yesod, ты теперь пользуйся только
Vladislav
два макроса вызвал, потом ReaderT, IO, приложение готово, всё
A64m
ну, при сноймановских представлениях о прагматичности его переход к идее "просто пишем функции из рекордов в IO ()" это только вопрос времени
A64m
так голое ио же, конечно иорефы можно, можно ни в чем себе не отказывать
Vladislav
ну, при сноймановских представлениях о прагматичности его переход к идее "просто пишем функции из рекордов в IO ()" это только вопрос времени
следующий логический шаг сделали ребята из Well Typed, там Duncan Coutts и Alexander Vieth сказали, мол, так и пишите, напридумывали еще что-то кроме функций и IO
Vladislav
рекорды, функции, IO, вперёд
Vladislav
если что, то это в контексте того, что IOHK нанимали FP Complete и Well Typed для консалтинга/аудита/разработки Cardano SL, и опытные господа там всё высказали
Vladislav
и кусками переписали
кана
Эффекты ортогональны моканию
ну не в этом случае же
Vladislav
а если только рекорды и функции, без IO, то это вообще высший пилотаж
Alexander
если что, то это в контексте того, что IOHK нанимали FP Complete и Well Typed для консалтинга/аудита/разработки Cardano SL, и опытные господа там всё высказали
Я читал отчет от FP Complete. Не припомню наездов на IO. Но не исключаю, что пропустил. А правильно ли я понимаю, что это сейчас было в пику ребятам из Serokel?
Vladislav
во-первых наезды на IO были от WT, а не от FP Complete во-вторых я не знаю что такое "в пику"
Vladislav
и что "это сейчас" такое было
Alexander
Отчет от WT тогда бы хотел тоже читануть. Но да, за IO-императивщину в Haskell я бы тоже ругался
Vladislav
ФП какое-то, фу
они там просто сами до конца решить не могли, что считается, а что не считается за чистый код вроде если MonadFoo m, MonadBar m писать код, то там ничего его к IO не привязывает, а все равно плохо, жалуются, говорят на рекорды и функции переписать но в реальном-то мире надо к IO инстанцировать, иначе стриминга не будет
Vladislav
Отчет от WT тогда бы хотел тоже читануть. Но да, за IO-императивщину в Haskell я бы тоже ругался
Нет там никакого отчета, по крайней мере публичного. На GitHub только жалуются, ничего лучше не предлагают.
Евгений
По-моему надо как в агде -- IO только в одной функции и норм
Vladislav
Такое работает только если код не запускать
Евгений
Фу, ещё код запускать
Vladislav
Если у тебя в базе данных гигабайты лежат, и тебе обработать их надо, то ты либо пишешь логику обработки в IO, либо используешь стриминг-абстракцию (которую инстанцируешь в IO), либо пытаешься совместить чистую функцию и lazy IO (на практике никогда не работает, понятное дело, это же lazy IO)
Vladislav
а когда эта логика в ядре системы, то у тебя получается либо вся система в IO, либо вся система в абстрактной монаде, либо вся система без стриминга (так нельзя)
Vladislav
даже если концептуально можно было бы написать все чистыми функциями, в каком-то там мире с бесконечной RAM
Vladislav
очень отвратительно было с WT работать, которые советовали одно (пишите всё чистыми функциями, не переабстрагируйте!!11), а как их до кода пускали, то использовали какие-то адские абстракции вроде IO пятой вложенности и переизобретения своего варианта mtl, и очень радовались, какие они умные и все придумали
Vladislav
как будто их трейнинг был не консалтить, а мешать разработке и делать так, чтобы их подольше нанимали. консалтинг мутится, баблишко крутится
Vladislav
у меня просто горит с WT, я высказаться хотел
Alexander
Вот так срыв покровов.
Alexander
Иначе говоря алгебраические эффекты страдают тем, что в них ты теряешь контроль над типами эффектов?
Не знаю. Знаю только, что их использование не приносит бенефитов, а боли добавляет немеряно. В условиях непрерывно изменяющихся требований и постоянного рефакторинга тасовать типы совсем неинтересно.
Vladislav
в то же время FP Complete в лице Сноймана кстати хорошо консалтили и все его рекомендации по делу и консистентны между собой просто у него принцип разработки в том, что написать boilerplate не страшно, писать надо код предельно тупой. ReaderT IO, и лучше TVar с STM вместо IORef код, конечно, получается, императивный, но все и так знают, что Haskell is the best imperative language, вот примерно таким его Снойман и видит
Vladislav
лучше так писать, чем на Java, но это не то чтобы был большой прыжок технологический на фоне Java
Alexander
TVar с STM и правда лучше
Vladislav
ну да, кроме трех тонн оверхеда, которые они за собой несут, но до профайлинга об этом нечего рассуждать я просто говорю, что у Сноймана есть фичи языка, которые он знает, что хорошо работают (IO, STM, ReaderT, async), и он крайне скептично относится ко всему, что в его привычный тулкит не укладывается
Vladislav
и возможно правильно делает, если цель поскорее хуяк-хуяк и в продакшен, а не узнать три новых факта о том, какие проблемы есть у свободных эффектов и т.д.
Кабачок
Не, ну так и к успеху можно придти
Alexander
Что-то я все равно не пойму, Снойман - он хороший или плохой?
Слава
Господа, а зайдите в расточат. Там идиотская дискуссия намечается
Alexander
Ссыль!
Alexander
Обожаю идиотские дискуссии
Слава
Люди хотят отправлять get с body и говорят, что это норм
kosc
@rustlang_ru ?
kosc
Хотя, мб это не тот расточат.
kosc
Я хз.
Слава
@rustlang_ru
Алексей
Лоооооооооол тело запроса у GET
Andrei
Люди хотят отправлять get с body и говорят, что это норм
да пусть отправляют, хоть через руки дойдёт
Алексей
надо быть нарокманом чтобы такое придумать
Alexander
Насколько я помню, хаскельные HTTP клиенты даже не дают такое сделать
Алексей
не только хаскельные
Aliester
тело запроса у гет может быть
Aliester
но оно не стандартизировано
kosc
Насколько я помню, хаскельный Network.HTTP не даёт делать https-запросы.
Aliester
потому харам
Alexander
И я точно видел вопрос на SO про это.