Alexander
так что может в середине статьи у меня бы были ещё какие прозрения
Евгений
Мне казалось, что фишки эффектов всяких это коммутативность и возможность более сложные взаимосвязи строить
Ilya
да, кстати, по поводу изоморфности: вроде же не любая монада алгебраический эффект
Евгений
А в популярных хаскелилибах либо тупой стек, либо "умный", умеющий добраться до первого слоя нужного вида
Ilya
https://stackoverflow.com/questions/31335805/monad-transformers-more-powerful-than-effects-examples
Alexander
Не используйте Eff в PureScript. Его, во-первых, выпилили, во вторых это больше мешает, чем помогает. Не помогает от слова совсем.
freer от Intakt страдает тем же.
Да и вообще, расширяемые эффекты - зло
Alexander
Может, с математической точки зреия они и норм, но не практичны ни разу.
кана
Alexander
кана
в любом случае вынести какой-то список команд в эффект/монаду и указать, что в этом коде у тебя вот этот эффект (MonadDB, MonadState), и потом мокать конкретные эффекты
Андрей
Leonid 🦇
ITT меряются школами
Alexander
Alexander
mtl это хорошо
A64m
только мокать MonadDB замучаешься, надо что-то поконкретнее
Vladislav
Это нормально.
все пишем в ReaderT IO, мокать ничего не нужно, так Снойман сказал
Leonid 🦇
Ну если у тебя в ReaderT лежит рекорд функций
Alexander
Эффекты ортогональны моканию
A64m
Vladislav
я говорю как Снойман сказал, не надо спорить с умным человеком
Vladislav
и какое-то свое мнение или подходы придумывать, он придумал уже
Alexander
Точнее, IoC/DI
Alexander
Alexander
Но до Сноймана, конечно, далеко
Vladislav
что ты там придумал, все программирование Снойман уже сделал в своих TH-макросах к Yesod, ты теперь пользуйся только
Vladislav
два макроса вызвал, потом ReaderT, IO, приложение готово, всё
A64m
ну, при сноймановских представлениях о прагматичности его переход к идее "просто пишем функции из рекордов в IO ()" это только вопрос времени
Евгений
A64m
так голое ио же, конечно иорефы можно, можно ни в чем себе не отказывать
Vladislav
рекорды, функции, IO, вперёд
Vladislav
если что, то это в контексте того, что IOHK нанимали FP Complete и Well Typed для консалтинга/аудита/разработки Cardano SL, и опытные господа там всё высказали
Vladislav
и кусками переписали
кана
Vladislav
а если только рекорды и функции, без IO, то это вообще высший пилотаж
Евгений
Vladislav
во-первых наезды на IO были от WT, а не от FP Complete
во-вторых я не знаю что такое "в пику"
Vladislav
и что "это сейчас" такое было
Alexander
Отчет от WT тогда бы хотел тоже читануть.
Но да, за IO-императивщину в Haskell я бы тоже ругался
Vladislav
ФП какое-то, фу
они там просто сами до конца решить не могли, что считается, а что не считается за чистый код
вроде если MonadFoo m, MonadBar m писать код, то там ничего его к IO не привязывает, а все равно плохо, жалуются, говорят на рекорды и функции переписать
но в реальном-то мире надо к IO инстанцировать, иначе стриминга не будет
Евгений
По-моему надо как в агде -- IO только в одной функции и норм
Vladislav
Такое работает только если код не запускать
Евгений
Фу, ещё код запускать
Vladislav
Если у тебя в базе данных гигабайты лежат, и тебе обработать их надо, то ты либо пишешь логику обработки в IO, либо используешь стриминг-абстракцию (которую инстанцируешь в IO), либо пытаешься совместить чистую функцию и lazy IO (на практике никогда не работает, понятное дело, это же lazy IO)
Vladislav
а когда эта логика в ядре системы, то у тебя получается либо вся система в IO, либо вся система в абстрактной монаде, либо вся система без стриминга (так нельзя)
Vladislav
даже если концептуально можно было бы написать все чистыми функциями, в каком-то там мире с бесконечной RAM
Vladislav
очень отвратительно было с WT работать, которые советовали одно (пишите всё чистыми функциями, не переабстрагируйте!!11), а как их до кода пускали, то использовали какие-то адские абстракции вроде IO пятой вложенности и переизобретения своего варианта mtl, и очень радовались, какие они умные и все придумали
Vladislav
как будто их трейнинг был не консалтить, а мешать разработке и делать так, чтобы их подольше нанимали. консалтинг мутится, баблишко крутится
Евгений
Vladislav
у меня просто горит с WT, я высказаться хотел
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
Алексей
надо быть нарокманом чтобы такое придумать
Alexander
Насколько я помню, хаскельные HTTP клиенты даже не дают такое сделать
Алексей
не только хаскельные
Aliester
тело запроса у гет может быть
Aliester
но оно не стандартизировано
kosc
Насколько я помню, хаскельный Network.HTTP не даёт делать https-запросы.
Aliester
потому харам
Alexander
И я точно видел вопрос на SO про это.