Алексей
Ядовитые, т.е. от фри монад дохнут кони и программисты
Alexander
Я жив, брат тоже.
Alexander
Не надо думать, будто это не ФП, если кто-то так думает. Есть вещи, справедливые на уровне концепций. Концепция "разделяй и властвуй" в том или ином виде существует в инженерии ПО многие годы.
Алексей
Проблема то не в концепциях и ври монадах, а в том, что вас никто не понимает (я тоже)
Denis
по температуре в комнате можно было давно понять уровень интереса, имхо
Alexander
Ну потому что это уже более продвинутые штуки, и базу я не могу в двух словах передать.
Leonid 🦇
/r/iamverysmart
Denis
чего ж вы время тратите на нас, убогих таких?
Alexander
Давайте без токсичности.
A64m
вчера слушал подкаст, в котором говорили, что фримонады убивают скалу, а виноваты хаскелисты.
Alexander
Я пытаюсь решение предложить, если не ясно - задавайте вопросы
Leonid 🦇
Зигохистоморфный
Давайте без токсичности.
ну я бы сделал так, не распинался тут в чате, а написал бы нормальную статью с номальным юзкейсом, а не просто дслку для простейшего языка где можно сложить 2 числа
Alexander
Окей, не нравятся фри монады, делайте интерпретируемые GADTs для элементов предметной области.
Leonid 🦇
Я считаю что пора задуматься об окончательном решении SOLID вопроса
Alexander
Зигохистоморфный
Denis
кана
такс-такс, я не понял, тут против подхода "разделять интерфейс и реализацию" или конкретно фри-монад?
Denis
Alexander
Вот и я не очень понимаю, против каких конкоетно тезисов тут выступают и что называют буллщитом.
Dmitry
интерфейс и реализацию разделять - ок
Dmitry
SOLID если его расшифровывать звучит как булшит
Dmitry
полезность фримонад несколько преувеличена, и то, что можно сделать с ними, можно сделать и без них
A64m
но ведь таглесс-файнл лучше, разве нет?
Alexander
А чем плох принцип единственной ответственности?
Dmitry
ничем
Alexander
Alexander
ничем
А чем плохо понимать подистему в терминах ее интерфейса, а не импдементации? Или в хаскельных программах не бывает подсистем?
Dmitry
ничем. дальше
Dmitry
идём
Dmitry
O
Alexander
Alexander
Open close. Чем плохо программировать данными некоего DSL, а не переписывать всю программу? Открыто для расширения? Да, пиши себе поведение. Закрыто для модификации? Да, DSL меняется редко (если задизайнен правчильно)
Denis
final tagless с монадами и эффектами никак не связан, так что очевидимо более широкое понятие
Dmitry
это не единственная возможность реализовать O.
Dmitry
например, вторая возможность - не расширять ADT (потому, что это модификация), а делать на типах / тайпклассах
Alexander
Dmitry
этот подход имеет право на жизнь, но он дико трудоемок, сложен и соответственно - не всегда оправдан
Leonid 🦇
@qnikst ты ждал https://twitter.com/phadej/status/961962557182562304
Dmitry
чем плохи DSL
Dmitry
тем, что когда ты пишешь на DSL, ты используешь haskell как намного более примитивный язык, лишенный почти всех возможностей
Dmitry
не всё можно напистать таким образом.
Alexander
Dmitry
неважно
Dmitry
это верно для обоих
Denis
внутренний DSL - функция
A64m
Dmitry
"даже и такого не будет", да.
Dmitry
но зато сам внешний язык можно сделать хотя бы чуть более приличным, без штрафа на управляюшие конструкции
Leonid 🦇
А сервант отделяет интерфейс от реализации?
Dmitry
ну пожалуй что да
Alexander
Безусловно, есть в этом правда. Но вы _всегда_ пишете DSL. Пусть даже не очень выраженные. Код ршает задачу предметной области? Ну значит, он описывает эту предметную область и является Domain specific
Dmitry
там эту реализацию еще поди найди
Dmitry
а потом поди пойми
Dmitry
@lonokhov тайпклассы + тайп фэмили = отличный способ сокрытия реализации
Leonid 🦇
Dmitry
@lonokhov в смысле что даже когда её найдешь, еще поди в ней разберись
кана
Dmitry
те же - это какие?
Leonid 🦇
Этот чат начинает будить во мне токсичный кибербуллинг
кана
ну ты как-то говорил, что во фри-монадах нельзя делать if какой-нибудь и хотел какой-то If-конструктор добавлять, это все неверно
Dmitry
ну это штраф edsl на управляющие конструкции
Dmitry
все неверно - это что означает?
кана
ну так во фри-монадах это не нужно, там работает обычный if
Dmitry
непонятно, зачем там нужно всё остальное. короче, фримонады это такой паттерн GoF "template method", да?
кана
и я кидал, почему 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 ())
отсюда и ветвления
Alexander
Leonid 🦇