
Dmitry
07.02.2018
16:22:42
кто именно?

kana
07.02.2018
16:22:43

Dmitry
07.02.2018
16:22:44
я уже потерялся

Denis
07.02.2018
16:22:58
да все

Google

Dmitry
07.02.2018
16:23:10
т.е мы поговорили за фримонады, и я понял, что можно не писать инстанс монады, если хочпется написать примерно столько же по объему чего-то иного
и еще получить ряд ограничений за это.

Александр
07.02.2018
16:23:23
в total у нас будет геттинг этого коэфицента из api
Если какой-то коэффициент есть в сервисе, и его можно достать методом сервиса, то это не "геттер". Это просто данные, которые вы получаете в сценарии. Да, в некотором роде, сценарии для invoice - императивны. Но только в некотором. И это необязательное правило для eDSL.

Denis
07.02.2018
16:24:00
самая мякотка началась, когда тут за солид начали топить

Dmitry
07.02.2018
16:24:22
мы поговорили за IoC и пришли к тому, что это фабрика, которая возвращает разные реализации в зависимости от состояния жирного xml-ного конфига, и при некотором напряге это делается и в нашем уютненьком.

Александр
07.02.2018
16:24:23
Денис, в чем проблема с SOLID?

Dmitry
07.02.2018
16:24:50
хотя это бывает довольно непросто и код выгядит довольно неестественно при этом, да.

Denis
07.02.2018
16:25:23
нет SOLID, нет проблем

Dmitry
07.02.2018
16:26:02
особенно весело выглядит O и ADT, например

Александр
07.02.2018
16:26:07
Нет, ребята, вы так и не поняли. Вы оцениваете с позиции ООП. Вместо того чтобы понять, что есть универсальные принципы дизайна поддерживаемого, тестируемого, чистого кода. Не важно в какой парадигме.

Dmitry
07.02.2018
16:26:23
мы сразу приезжаем к тайпклассам, тайпфэмили и вот этому вот всему

Denis
07.02.2018
16:26:28
Проблема в том что про эту дурь для запугивания java-юниоров вообще думать не надо при написании функционального кода. В любых количествах.

Dmitry
07.02.2018
16:26:50
UndeicidableInstances ftw

Google

Александр
07.02.2018
16:26:54
Ну о чем тут можно говорить. Я пошел работать.
Денис, не буду оспаривать ваше право на любую точку зрения, пусть даже неверную

Denis
07.02.2018
16:27:44
передайте вашему работателю, что может отблагорить меня биткоинами, за возвращение сотрудника в работу

Dmitry
07.02.2018
16:28:27
L в SOLID это вообще очень интересно. там звучит слово "correctness"
и угадайте что?
с I никто не будет спорить, но это просто тайпклассы, например. или функции.
я сделаю четвертый заход на фримонады, но если опять придется их выкинуть ввиду никчемности, прокляну.

Denis
07.02.2018
16:29:58
L про сабтайпинг же

Dmitry
07.02.2018
16:30:23
мне кажется это можно без сабтайпинга попробовать, но что насчёт корректности:
корректность это вообще что?
если мы не знаем, что с корректностью было до замены на сабтип
не знаем что было после

Denis
07.02.2018
16:30:48
а покажи формулировку?

Dmitry
07.02.2018
16:31:04

Denis
07.02.2018
16:31:23
я пишу с утюга
спасибо

Dmitry
07.02.2018
16:31:32
Liskov substitution principle[6]
“objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.” See also design by contract.
если мы не знаем ничего о корректности того, что было
не знаем, какие изменения и побочные эффекты мы вносим, заменяя на другие инстансы, что мы можем сказать о корректности?

Google

Dmitry
07.02.2018
16:32:25
ничего не могли сказать до, ничего не можем сказать после

Denis
07.02.2018
16:32:51
SOLID это как REST
из той же оперы

Dmitry
07.02.2018
16:33:00
мне кажется это как BS

Denis
07.02.2018
16:33:15
я разве не так сказал?

Dmitry
07.02.2018
16:33:21
ну я сказал это короче
короче - значит, правильнее

Denis
07.02.2018
16:33:30
засчитано

Dmitry
07.02.2018
16:33:36
!
это мы, кстати, еще про большие программы vs маленькие не поговорили еще
например, что 10K loc на сях - это ниочём
а на 10K loc на хаскелле - это ничего себе.

Denis
07.02.2018
16:36:22
я сегодня ретвитил про 200KLOC эльма в год

Dmitry
07.02.2018
16:36:50
и о клеточках из BS бинго, как о способе сделать из маленькой программы большую, что бы решить проблемы программы, когда она станет большой

Denis
07.02.2018
16:39:32
https://pbs.twimg.com/media/CxzX0scXUAA21uo.jpg

Александр
07.02.2018
16:40:49

kana
07.02.2018
16:41:04

Leonid
07.02.2018
16:41:32
Вот у @voidlizard терпения то сколько.

Denis
07.02.2018
16:41:38

Dmitry
07.02.2018
16:42:16
Я на этой неделе менеджер, мне можно

Google

Dmitry
07.02.2018
16:42:40
На следующей может опять код писать буду

Denis
07.02.2018
16:42:57
я тоже, но я на работе терпение оставляю
неделя тут, неделя там
@lonokhov я с растоканала заржал. 9/10

Leonid
07.02.2018
16:46:37
Надо ещё фри монады притянуть

Dmitry
07.02.2018
16:47:03
@catamorphism не, мне просто теперь недели хватает, что бы переключиться
Раньше месяц нужен был

anton
07.02.2018
16:47:19
Кстати, в фримонадах там не эффективно они строятся, там проблемы с байндом в простой оригинальной реализации, на тайпклассах все же лучше, если несколько интерпретаций хочется

Denis
07.02.2018
16:48:17
Это Control.Monad.Free.Church решает

Leonid
07.02.2018
16:48:21

Denis
07.02.2018
16:48:21
емнип

anton
07.02.2018
16:48:55
И патерн матчинг он не совместим с edsl, ведь значений нет, это же синтаксич деревья все

Denis
07.02.2018
16:50:34

Denis
07.02.2018
16:51:46
список это частный случай Free

Denis
07.02.2018
16:51:58
знаем) плавали
DList это частный случай FreeChurch
хотя все это у Кметта есть в 3 статьях про фри монады

Denis
07.02.2018
16:53:27
каким образом это частный случай?

Google

Denis
07.02.2018
16:53:51
F f a явно общее DList a
т.е. в другую сторону еще поверю

kana
07.02.2018
16:54:40
паттерны в хаскеле это такие смарт-конструкторы с большой буквы?
или их еще и метчить можно?

Denis
07.02.2018
16:55:49
PatternSynonyms матчабельные

Denis
07.02.2018
16:57:51

Denis
07.02.2018
16:59:10
Ну так это означает что то, что справа - более общее. Т.к. инстанциируя это с другими функторами, получается больше вариаций.

Denis
07.02.2018
16:59:51

Denis
07.02.2018
17:00:20
http://prntscr.com/ibh8ak
> edited
там до этого наоборот было написано ?

Denis
07.02.2018
17:00:48
потерял направление текста)

Denis
07.02.2018
17:01:00
> ну я и сказал
ну и брехло )

Denis
07.02.2018
17:01:29
интересно так можно?
newtype Rec f r = MkRec { unRec :: (f r -> r) -> r }
newtype Rec' f = MkRec' { unRec' :: forall r. (f r -> r) -> r }
будет ли так равнозначно?

Denis
07.02.2018
17:05:21
не равнозначно

kana
07.02.2018
17:07:02
второй требует полиморфную по r функцию, а первый специализированную, которую составить намного проще (то есть потенциально и тип более населен)

Denis
07.02.2018
17:08:00
ну это понятно
интересно можно их свести к изоморфности?