
Alexander
03.07.2018
11:01:48
и bytestring и vector
там вообще inlineIO

Денис
03.07.2018
11:02:19
чтобы их использовать не нужно знать как работает unsafePerformIO
и пока сам не вызваешь всё ок

Google

Alexander
03.07.2018
11:02:58
ReaderT, конечно, каноничнее, но в данном случае не даёт никаких плюсов, а только проблемы
а вообще лучше так, почему нельзя использовать unsafePerformIO ?

Денис
03.07.2018
11:04:39
название как бы намекает

Vladimir
03.07.2018
11:05:45
можно, но там же внутренний голос, ему доводы нужны

Pineapple
03.07.2018
11:06:41
Ну тащемта окружение можно менять, так что совсем канонично-ортодоксально getEnv

Денис
03.07.2018
11:06:56
На мой взгляд важный довод. Если название функции говорит, что она unsafe, то код без неё лучше.

Alexander
03.07.2018
11:07:03
не катит
вообще не логичный довод, ну разве если ты знакомишься с языком

Денис
03.07.2018
11:07:43
названия это очень важно

Alexander
03.07.2018
11:08:08
поскольку тогда одна часть программы может неявно менять поведение другой
названия это очень важно
и.е. вы видите название и предлагаете на основе только этого, а не какого либо другого знания советы другим людям?
не надо так

Google

Pineapple
03.07.2018
11:09:29
unsafe = не пользуйся, не зная зачем и как работает

Vladimir
03.07.2018
11:09:32
если переменная инициализируется только единожды, при первом обращении,то unsafe предочтительнее, в других
случаях надо думать

Pineapple
03.07.2018
11:10:03
Я б еще NOINLINE добавил к переменной

Alexander
03.07.2018
11:10:10
да
это обязательно

Vladimir
03.07.2018
11:10:35
вот это отличное замечание

Leonid
03.07.2018
11:11:45

Alexander
03.07.2018
11:12:58
ну там алиас
вот эту штуку лучше точно использовать только если все понимаешь

Leonid
03.07.2018
11:13:37
@astynax не знаю что ты меня пугал с формочками, я на Люсе с type Form e a = HtmlT (Reader FormEnv) a собрал тут на коленке. вроде хватает :)

Alexander
03.07.2018
11:13:44
unsafe у unsafePerformIO т.к. через него можно сделать unsafeCoerce
неожиданно и засегфолтитт программу
с safe функциями этого не должно быть возможнр
т.к. система типов должна быть sound

Денис
03.07.2018
11:14:59

Alexander
03.07.2018
11:15:10
и что же вы знаете?

Денис
03.07.2018
11:15:49
что она плохая
и что почти всегда можно обойтись без неё

Alexander
03.07.2018
11:16:14
(я очень не люблю когда люди говорят "это плохо, потому что это плохо", поэтому просто так не отстану)
идеология в инженерных науках неприемлима

Google

Alexander
03.07.2018
11:17:02
чем она плохая?

Денис
03.07.2018
11:17:18
вообще-то в программировании идеология это всё

Alexander
03.07.2018
11:17:19
какие трейдофы мы получим если обойдёмся без неё

Денис
03.07.2018
11:17:36

Alexander
03.07.2018
11:17:41
можно конкретно в данном случае

Leonid
03.07.2018
11:17:42
меня вчера в расточате уверяли что ансейф примитивы положено только в стд использовать, потому что там боги а все остальные тупые

Денис
03.07.2018
11:17:56
ну я точно тупой

Leonid
03.07.2018
11:19:08
это конечно в blah

Alexander
03.07.2018
11:20:35
в общем использование unsafePerformIO для создания топ-левел констант инициализация которых в IO это один из немногих валидных юзкейсов
естественно с uninline
noinline
(тупой Т9)
но константа действительно должна быть константой
это хуже reader тем, что нету функции local
так же тем что по типу такого поведения не видно
из плюсов, что композить такие функции проще

Google

Alexander
03.07.2018
11:22:33
учитывая, что это используется для отладки - не платить трейдоф за ReaderT просто так - вполне нормально

Денис
03.07.2018
11:24:21

Leonid
03.07.2018
11:24:37
господи

Денис
03.07.2018
11:24:54
вы на хаскеле пишете, хеллоу

Yuriy
03.07.2018
11:26:00
надо различать преждевременную оптимизацию и правильное проектирование

Денис
03.07.2018
11:26:32

Leonid
03.07.2018
11:26:46
вот я уверен что фраза про преждевременную оптимизацию вырвана из контекста.
А привела она ко всему этому горькому катаклизму который я тут наблюдаю... И Владимир Николаевич тоже

Yuriy
03.07.2018
11:27:46

Денис
03.07.2018
11:28:29
соглашусь

Admin
ERROR: S client not available

Денис
03.07.2018
11:31:02

Alexander
03.07.2018
11:31:05
делать ReaderT на любую константу (или runtime константу конечно можно)

Leonid
03.07.2018
11:31:42

Денис
03.07.2018
11:33:14
но это же почти всегда

Leonid
03.07.2018
11:36:58
Почти всегда в каких задачах то? В компиляторе? Или в рейтрейсере? Или в игрушках (разве что IO с gpu) ?

Денис
03.07.2018
11:38:18
во многих

Alexander
03.07.2018
11:44:07
тут-то ботлнек при чем?
ReaderT Conf имеет смысл если зависимость от Conf это важная часть приложения
кстати есть веселая либа hflags
там все радостные практики связаны, TH, сборка инстансов в Main, unsafePerformIO

Google

Pineapple
03.07.2018
11:51:41

Index
03.07.2018
11:54:22
идеология не только приемлима, она еще и нужна

Alexander
03.07.2018
11:54:52
не нужна, нужна аргументация нормальная и доводы

Денис
03.07.2018
11:55:11
Если нет идеологии, то получается c++

Index
03.07.2018
11:55:40
Без нее можно скатиться в локальные максимумы слишком легко. Если адекватно взвестить все за и против, можно прийти к решению, которое в данном контексте наилучшее. Идеология может (а хорошая - должна) привести к качественным прорывам

Pineapple
03.07.2018
11:55:41
А если есть — эльм

Index
03.07.2018
11:56:18
Например, можно было использовать unsafeCoerce потому что так быстрее и "I know what I'm doing", а можно было придумать Coercible
Ну и собственно вариант с unsafeCoerce и привел к тому, что до ролей и Coercible у нас GND был subtly broken
Или еще пример. Если руководствоваться только практикой и юзкейсами, можно взять и придумать stack, а потом страдать с его снэпшотами. А можно до последнего добиваться нормального солвера и придумать cabal new-build с nix-style storage

Leonid
03.07.2018
12:00:15
ЧТД
Практики можно тут спрашивать, если что. Мы хоть посремся

Pineapple
03.07.2018
12:00:46
Мне кажется, что @qnikst и @int_index понимают под идеологией разные вещи

Anatolii
03.07.2018
12:05:32
а вы при разработке используете репл?

Index
03.07.2018
12:05:47
немножко

Alexander
03.07.2018
12:06:25
немного, т.к. полноценно тулинг не позволяет

Anatolii
03.07.2018
12:06:43
этот вопрос у меня возник после прочтения статьи тонского

Alexander
03.07.2018
12:07:27
я просто для запуска м проверки простых вещей и быстрого ребилда использую

Anatolii
03.07.2018
12:07:40
ну я тоже для проверки простых вещей

Alexander
03.07.2018
12:07:43
хотел бы уметь копировать определения в файл и обратно

Anatolii
03.07.2018
12:08:22
я когда надо что-то посложнее сделать - делаю модуль отдельный и его загружаю