
Leonid
25.07.2018
13:27:21
ITT меряются школами

Alexander
25.07.2018
13:28:56
mtl это хорошо

A64m
25.07.2018
13:29:45
только мокать MonadDB замучаешься, надо что-то поконкретнее

Google

Index
25.07.2018
13:31:36
Это нормально.
все пишем в ReaderT IO, мокать ничего не нужно, так Снойман сказал

Leonid
25.07.2018
13:32:17
Ну если у тебя в ReaderT лежит рекорд функций

Александр
25.07.2018
13:33:46
Эффекты ортогональны моканию

A64m
25.07.2018
13:34:46

Index
25.07.2018
13:35:04
я говорю как Снойман сказал, не надо спорить с умным человеком
и какое-то свое мнение или подходы придумывать, он придумал уже

Александр
25.07.2018
13:35:39
Точнее, IoC/DI
Но до Сноймана, конечно, далеко

Index
25.07.2018
13:38:07
что ты там придумал, все программирование Снойман уже сделал в своих TH-макросах к Yesod, ты теперь пользуйся только
два макроса вызвал, потом ReaderT, IO, приложение готово, всё

A64m
25.07.2018
13:38:29
ну, при сноймановских представлениях о прагматичности его переход к идее "просто пишем функции из рекордов в IO ()" это только вопрос времени

Евгений
25.07.2018
13:39:32

Google

A64m
25.07.2018
13:39:59
так голое ио же, конечно иорефы можно, можно ни в чем себе не отказывать

Index
25.07.2018
13:40:18
рекорды, функции, IO, вперёд
если что, то это в контексте того, что IOHK нанимали FP Complete и Well Typed для консалтинга/аудита/разработки Cardano SL, и опытные господа там всё высказали
и кусками переписали

kana
25.07.2018
13:41:18

Index
25.07.2018
13:42:50
а если только рекорды и функции, без IO, то это вообще высший пилотаж

Евгений
25.07.2018
13:43:32

Александр
25.07.2018
13:43:50

Index
25.07.2018
13:44:52
во-первых наезды на IO были от WT, а не от FP Complete
во-вторых я не знаю что такое "в пику"
и что "это сейчас" такое было

Александр
25.07.2018
13:46:20
Отчет от WT тогда бы хотел тоже читануть.
Но да, за IO-императивщину в Haskell я бы тоже ругался

Index
25.07.2018
13:46:27
ФП какое-то, фу
они там просто сами до конца решить не могли, что считается, а что не считается за чистый код
вроде если MonadFoo m, MonadBar m писать код, то там ничего его к IO не привязывает, а все равно плохо, жалуются, говорят на рекорды и функции переписать
но в реальном-то мире надо к IO инстанцировать, иначе стриминга не будет

Евгений
25.07.2018
13:47:33
По-моему надо как в агде -- IO только в одной функции и норм

Index
25.07.2018
13:48:12
Такое работает только если код не запускать

Евгений
25.07.2018
13:49:01
Фу, ещё код запускать

Index
25.07.2018
13:49:21
Если у тебя в базе данных гигабайты лежат, и тебе обработать их надо, то ты либо пишешь логику обработки в IO, либо используешь стриминг-абстракцию (которую инстанцируешь в IO), либо пытаешься совместить чистую функцию и lazy IO (на практике никогда не работает, понятное дело, это же lazy IO)
а когда эта логика в ядре системы, то у тебя получается либо вся система в IO, либо вся система в абстрактной монаде, либо вся система без стриминга (так нельзя)
даже если концептуально можно было бы написать все чистыми функциями, в каком-то там мире с бесконечной RAM

Google

Index
25.07.2018
13:51:35
очень отвратительно было с WT работать, которые советовали одно (пишите всё чистыми функциями, не переабстрагируйте!!11), а как их до кода пускали, то использовали какие-то адские абстракции вроде IO пятой вложенности и переизобретения своего варианта mtl, и очень радовались, какие они умные и все придумали
как будто их трейнинг был не консалтить, а мешать разработке и делать так, чтобы их подольше нанимали. консалтинг мутится, баблишко крутится

Евгений
25.07.2018
13:53:47

Index
25.07.2018
13:53:59
у меня просто горит с WT, я высказаться хотел

Александр
25.07.2018
13:54:16
Вот так срыв покровов.

Alexander
25.07.2018
13:59:37

Александр
25.07.2018
14:02:28

Index
25.07.2018
14:04:23
в то же время FP Complete в лице Сноймана кстати хорошо консалтили и все его рекомендации по делу и консистентны между собой
просто у него принцип разработки в том, что написать boilerplate не страшно, писать надо код предельно тупой. ReaderT IO, и лучше TVar с STM вместо IORef
код, конечно, получается, императивный, но все и так знают, что Haskell is the best imperative language, вот примерно таким его Снойман и видит
лучше так писать, чем на Java, но это не то чтобы был большой прыжок технологический на фоне Java

Александр
25.07.2018
14:05:23
TVar с STM и правда лучше

Index
25.07.2018
14:07:34
ну да, кроме трех тонн оверхеда, которые они за собой несут, но до профайлинга об этом нечего рассуждать
я просто говорю, что у Сноймана есть фичи языка, которые он знает, что хорошо работают (IO, STM, ReaderT, async), и он крайне скептично относится ко всему, что в его привычный тулкит не укладывается
и возможно правильно делает, если цель поскорее хуяк-хуяк и в продакшен, а не узнать три новых факта о том, какие проблемы есть у свободных эффектов и т.д.

Pig
25.07.2018
14:16:08
Не, ну так и к успеху можно придти

Александр
25.07.2018
14:16:48
Что-то я все равно не пойму, Снойман - он хороший или плохой?

Слава
25.07.2018
14:17:13
Господа, а зайдите в расточат. Там идиотская дискуссия намечается

Александр
25.07.2018
14:17:29
Ссыль!
Обожаю идиотские дискуссии

Слава
25.07.2018
14:17:50
Люди хотят отправлять get с body и говорят, что это норм

Hot
25.07.2018
14:17:52
@rustlang_ru ?
Хотя, мб это не тот расточат.

Google

Hot
25.07.2018
14:18:05
Я хз.

Слава
25.07.2018
14:18:24
@rustlang_ru

Алексей
25.07.2018
14:19:02
Лоооооооооол
тело запроса у GET

Andrei
25.07.2018
14:19:07

Алексей
25.07.2018
14:19:10
надо быть нарокманом чтобы такое придумать

Александр
25.07.2018
14:19:35
Насколько я помню, хаскельные HTTP клиенты даже не дают такое сделать

Алексей
25.07.2018
14:19:49
не только хаскельные

Alister
25.07.2018
14:19:59
тело запроса у гет может быть
но оно не стандартизировано

Hot
25.07.2018
14:20:08
Насколько я помню, хаскельный Network.HTTP не даёт делать https-запросы.

Admin
ERROR: S client not available

Alister
25.07.2018
14:20:10
потому харам

Александр
25.07.2018
14:20:22
И я точно видел вопрос на SO про это.

Alister
25.07.2018
14:21:13

Index
25.07.2018
14:21:44
Что-то я все равно не пойму, Снойман - он хороший или плохой?
Он хороший, потому что консистентен в своей позиции, объясняет хорошо, вникает в проблему, т.е. консалтит грамотно
Но он плохой, потому что если его много слушать, то можно из Haskell сделать функциональный Go, в том смысле, что новые фичи отторгаются в пользу проверенно работающих, даже если их видно не хватает для задачи

Алексей
25.07.2018
14:22:16
тело запроса у гет может быть
Мне вот что-то кажется, что если даже стандарт особо не запрещает тело у get, то всё равно наверняка не все веб сервера будут такое поддерживать. И не все клиенты.

Александр
25.07.2018
14:22:42
Снойман Шредингера

Index
25.07.2018
14:23:38
в смысле?

Hot
25.07.2018
14:23:39

Index
25.07.2018
14:23:54
типа хороший и плохой одновременно?

Google

Index
25.07.2018
14:24:21
нельзя же так людей делить

Александр
25.07.2018
14:25:56
Он не обидится :)

Index
25.07.2018
14:27:00
я вот пожаловался, например, на Alexander Vieth из Well-Typed, который консалтит не пойми как и в коде страшные вещи наворотил, но в то же время не буду отрицать, что он умный, крутые вещи время от времени придумывает (вроде https://github.com/avieth/type-lambda), и в GHC полезные contributions делает, и т.д.
хороший он или плохой?
Он не обидится :)
я просто не считаю, что можно охарактеризовать человека одной булевой переменной
ну то есть можно, но такая характеристика будет совершенно бесполезной, скорее вредной

Алексей Ayaye :)
25.07.2018
14:36:29

Александр
25.07.2018
14:37:30
Вот с хаскеллистами всегда так. Как что-нибудь придумывать, так они впереди планеты всей, ворочают вещами, уровень абстракции которых не поддается описанию. А как на в продакшене, так сразу какую-то ерунду пишут неподдерживаемую

Leonid
25.07.2018
14:39:30

Index
25.07.2018
14:39:40
изоморфно

Leonid
25.07.2018
14:40:07
можно добавить еще конструкторов

Index
25.07.2018
14:40:24
Null
для практичности

Dmitry
25.07.2018
14:40:29
WorkButSmells

Dmitry
25.07.2018
14:40:37
Вот с хаскеллистами всегда так. Как что-нибудь придумывать, так они впереди планеты всей, ворочают вещами, уровень абстракции которых не поддается описанию. А как на в продакшене, так сразу какую-то ерунду пишут неподдерживаемую
Думаю, что специфика языка влияет. Он позволяет сделать слишком много, и люди берутся за разное, экспериментируют. Поддерживаемый код в продакшене писать не так сложно, там обычный опыт программирования применим. Просто Haskell не так популярен, хорошие подходы не так сильно распространены, пока ещё слишком много разных способов написать что-то, и не всегда понятно, какой лучше.

Pineapple
25.07.2018
14:40:39
Good | Ungood | Doubpleplusungood

Александр
25.07.2018
14:41:44

Leonid
25.07.2018
14:43:59

Александр
25.07.2018
14:44:40
АЛГЕБРАИЧНО!

Index
25.07.2018
14:45:02

Alexander
25.07.2018
14:45:06
Он хороший, потому что консистентен в своей позиции, объясняет хорошо, вникает в проблему, т.е. консалтит грамотно
Но он плохой, потому что если его много слушать, то можно из Haskell сделать функциональный Go, в том смысле, что новые фичи отторгаются в пользу проверенно работающих, даже если их видно не хватает для задачи
Проблема в том, что нужно как-то сохранять ограниченное количество активно используемых фич. То есть если вводится какая-то новая суперважная всем нужная фича, то какую-то старую по хорошему бы задепрекейтить. Иначе будет разрастаться контекст, а кривая обучения будет становиться всё круче.

Index
25.07.2018
14:45:07

Александр
25.07.2018
14:45:57
?