
Александр
09.02.2018
13:47:46
Я серьезно, это же азы дизайна

Leonid
09.02.2018
13:47:58
Это mansplaining
и токсичные фри монады

Александр
09.02.2018
13:48:29
Я не знаю такого слова. И гуглить не буду, так как чувствую, это что-то обидное

Google

Pineapple
09.02.2018
13:49:02
Ядовитые, т.е. от фри монад дохнут кони и программисты

Александр
09.02.2018
13:49:26
Я жив, брат тоже.
Не надо думать, будто это не ФП, если кто-то так думает. Есть вещи, справедливые на уровне концепций. Концепция "разделяй и властвуй" в том или ином виде существует в инженерии ПО многие годы.

Pineapple
09.02.2018
13:52:18
Проблема то не в концепциях и ври монадах, а в том, что вас никто не понимает (я тоже)

Denis
09.02.2018
13:52:37
по температуре в комнате можно было давно понять уровень интереса, имхо

Александр
09.02.2018
13:53:00
Ну потому что это уже более продвинутые штуки, и базу я не могу в двух словах передать.

Leonid
09.02.2018
13:53:23
/r/iamverysmart

Denis
09.02.2018
13:53:31
чего ж вы время тратите на нас, убогих таких?

Александр
09.02.2018
13:53:45
Давайте без токсичности.

A64m
09.02.2018
13:53:57
вчера слушал подкаст, в котором говорили, что фримонады убивают скалу, а виноваты хаскелисты.

Александр
09.02.2018
13:54:02
Я пытаюсь решение предложить, если не ясно - задавайте вопросы

Leonid
09.02.2018
13:54:13

Denis
09.02.2018
13:55:15
Давайте без токсичности.
ну я бы сделал так, не распинался тут в чате, а написал бы нормальную статью с номальным юзкейсом, а не просто дслку для простейшего языка где можно сложить 2 числа

Google

Александр
09.02.2018
13:55:17
Окей, не нравятся фри монады, делайте интерпретируемые GADTs для элементов предметной области.

Leonid
09.02.2018
13:55:24
Я считаю что пора задуматься об окончательном решении SOLID вопроса

Александр
09.02.2018
13:55:53

Pineapple
09.02.2018
13:55:59

Denis
09.02.2018
13:56:08

Denis
09.02.2018
13:56:34

Александр
09.02.2018
13:56:39

A64m
09.02.2018
13:56:54

kana
09.02.2018
13:57:07
такс-такс, я не понял, тут против подхода "разделять интерфейс и реализацию" или конкретно фри-монад?

Denis
09.02.2018
13:57:17

Александр
09.02.2018
13:57:53
Вот и я не очень понимаю, против каких конкоетно тезисов тут выступают и что называют буллщитом.

Dmitry
09.02.2018
13:58:06
интерфейс и реализацию разделять - ок
SOLID если его расшифровывать звучит как булшит

Александр
09.02.2018
13:58:28

Dmitry
09.02.2018
13:58:40
полезность фримонад несколько преувеличена, и то, что можно сделать с ними, можно сделать и без них

A64m
09.02.2018
13:58:57
но ведь таглесс-файнл лучше, разве нет?

Александр
09.02.2018
13:58:58
А чем плох принцип единственной ответственности?

Dmitry
09.02.2018
13:59:05
ничем

Александр
09.02.2018
13:59:10

Denis
09.02.2018
13:59:35

Google

Александр
09.02.2018
13:59:54
ничем
А чем плохо понимать подистему в терминах ее интерфейса, а не импдементации? Или в хаскельных программах не бывает подсистем?

Dmitry
09.02.2018
14:00:08
ничем. дальше
идём
O

Александр
09.02.2018
14:00:23

A64m
09.02.2018
14:01:21

Александр
09.02.2018
14:01:54
Open close. Чем плохо программировать данными некоего DSL, а не переписывать всю программу? Открыто для расширения? Да, пиши себе поведение. Закрыто для модификации? Да, DSL меняется редко (если задизайнен правчильно)

Denis
09.02.2018
14:02:19
final tagless с монадами и эффектами никак не связан, так что очевидимо более широкое понятие

Dmitry
09.02.2018
14:02:24
это не единственная возможность реализовать O.
например, вторая возможность - не расширять ADT (потому, что это модификация), а делать на типах / тайпклассах

Александр
09.02.2018
14:03:18

Dmitry
09.02.2018
14:03:47
этот подход имеет право на жизнь, но он дико трудоемок, сложен и соответственно - не всегда оправдан

Leonid
09.02.2018
14:03:53
@qnikst ты ждал https://twitter.com/phadej/status/961962557182562304

Dmitry
09.02.2018
14:03:54
чем плохи DSL
тем, что когда ты пишешь на DSL, ты используешь haskell как намного более примитивный язык, лишенный почти всех возможностей
не всё можно напистать таким образом.

Александр
09.02.2018
14:04:48

Dmitry
09.02.2018
14:04:52
неважно
это верно для обоих

Google

Denis
09.02.2018
14:05:11
внутренний DSL - функция

A64m
09.02.2018
14:05:26

Dmitry
09.02.2018
14:05:44
"даже и такого не будет", да.
но зато сам внешний язык можно сделать хотя бы чуть более приличным, без штрафа на управляюшие конструкции

Leonid
09.02.2018
14:06:05
А сервант отделяет интерфейс от реализации?

Dmitry
09.02.2018
14:06:14
ну пожалуй что да

Александр
09.02.2018
14:06:14
Безусловно, есть в этом правда. Но вы _всегда_ пишете DSL. Пусть даже не очень выраженные. Код ршает задачу предметной области? Ну значит, он описывает эту предметную область и является Domain specific

Dmitry
09.02.2018
14:06:21
там эту реализацию еще поди найди
а потом поди пойми

Александр
09.02.2018
14:06:38

Dmitry
09.02.2018
14:07:05
@lonokhov тайпклассы + тайп фэмили = отличный способ сокрытия реализации

Александр
09.02.2018
14:07:06

Leonid
09.02.2018
14:07:13

Dmitry
09.02.2018
14:07:27
@lonokhov в смысле что даже когда её найдешь, еще поди в ней разберись

kana
09.02.2018
14:07:49

Dmitry
09.02.2018
14:08:03
те же - это какие?

Leonid
09.02.2018
14:08:36
Этот чат начинает будить во мне токсичный кибербуллинг

kana
09.02.2018
14:08:51
ну ты как-то говорил, что во фри-монадах нельзя делать if какой-нибудь и хотел какой-то If-конструктор добавлять, это все неверно

Dmitry
09.02.2018
14:09:13
ну это штраф edsl на управляющие конструкции
все неверно - это что означает?

Google

kana
09.02.2018
14:09:31
ну так во фри-монадах это не нужно, там работает обычный if

Александр
09.02.2018
14:10:04

Dmitry
09.02.2018
14:10:09
непонятно, зачем там нужно всё остальное. короче, фримонады это такой паттерн GoF "template method", да?

kana
09.02.2018
14:10:21
и я кидал, почему if работает, там же лямбда
data T n = GetValue (Int -> n) | DoSmth String n
do
value <- getValue
if value === 0
then doSmth1 "hello"
else pure ()
-- ==>
Free (GetValue (\value ->
if value === 0
then Free (DoSmth1 "hello" (Pure ()))
else Pure ())
отсюда и ветвления

Александр
09.02.2018
14:10:24

Leonid
09.02.2018
14:11:00

Dmitry
09.02.2018
14:11:08
еще хуже

kana
09.02.2018
14:11:18
фри это не аст, это ленивая последовательность команд, где каждый n+1 элемент может зависить от результата выполнения 0..n

Александр
09.02.2018
14:11:26
Не хотите фри монады, - можно и без них. Можно выразить предметную область типами и чистыми значениями. А потом в рантайме собирать из этого все, что вам нужно

Dmitry
09.02.2018
14:11:51
@kana_sama как мне сделать так, что из этого кода на фримонадах сгенерировать нечто (вместе с ифами), оптимизировать, сгенерить из результата - скажем - код на си?
Александр это называется "написать программу на хаскелле"

Denis
09.02.2018
14:12:43

Leonid
09.02.2018
14:12:57

Dmitry
09.02.2018
14:12:57
да, я вот пытаюсь найти это предметную область фримонад
оказывается, оно чуть-чуть в сторону и уже не область

kana
09.02.2018
14:13:10
без понятия, слишком сложный запрос для меня, я лишь расписал, почему во фри есть if, потому что судя по "во фри нет ветвления" у тебя сложилось неверное понимание того, что есть фри (еще раз, это не аст)

Александр
09.02.2018
14:13:25

Dmitry
09.02.2018
14:13:27
ну вот это не if как первоклассное значение, скажем так
он работает на этапе конструирования - если код на фримонадах что-то конструирует
но в том, что он конструирует его уже нет
если же я забыл слово "фримонада"