Алексей
О чём спор вообще?
Alexander
я спросил какую проблему должно решать наличие Free/FT для реализации STM
Alexander
причем предпложил несколько вариантов, для чего я вижу это может быть полезно
Alexander
то, как я интерпретировал ответы мне я говорить не будут, т.к. что подумал кролик никто не узнал
Alexander
сейчас спор идёт о том, дает ли Free магические свойства по разделению интерфейса от имплементации, если используется единственный интепретатор
Алексей
Нет, конечно
Alexander
Я не понимаю, почему не дает
Alexander
Что здесь есть "магическость"?
Alexander
"то, что я не могу объяснить, но оно должно быть"
Alexander
Как же так, если 2 интерпретатора и больше - такое свойство есть, а если 1 - нет?
Алексей
Я так думаю, что если _можно_ написать несколь реализаций интерфеса, то разделение есть
Alexander
"то, что я не могу объяснить, но оно должно быть"
Я уже 10 раз объяснил про рантаймовую инфу, которая должна быть только в имплементации. Хочешь примеров, они у меня в ГитХабе
Alexander
моё утверждение - Free дает возможность делать разные интерпретаторы, по сравнению,со, скажем, модулями
Alexander
это его основное свойство
Alexander
Я и не отрицал этого свойства в такой формулировке
Alexander
новое по сравнению с module
Alexander
оно не дает большего отделения, если у тебя 1 интепретатор, то возникает вопрос, а зачем мне Free
Alexander
и что я должен продемонтрировать если напишу на FT
Alexander
вот опять
Alexander
Зачем закрывают интерфейсом ровно 1 имплеметацию в обычных ООП-языках?
Alexander
Даже зная, что никогда второй имплементации не понадобится
Alexander
Правильно, чтобы уменьшать сложность путем разделения ответственностей
Алексей
Ну можно, например, скрыть реализацию, не покзывая её з модулдя
Алексей
С тем же эффектом
Alexander
3 варинта: 1. понадобится 2. для множественного наследованя 3. карго-культ
Alexander
выбирай, тот что удобнее
Alexander
Ну можно, например, скрыть реализацию, не покзывая её з модулдя
Как мне в эту скрытую часть пропихнуть свои рантаймовые данные? Настройки какие-нибудь. Не через публичный интерфейс функций, само собой
Alexander
выбирай, тот что удобнее
4) Уменьшение сложности не вариант по какой причине?
Alexander
НЕТ!
Alexander
просто использование класса иил модуля дает тот же эффект
A64m
Зачем закрывают интерфейсом ровно 1 имплеметацию в обычных ООП-языках?
1) так положено, потому что архитектурка 2) ретроспективно ничего не обобщишь, тайпклассов с модулями-то нету
Alexander
причем даже не мл-евского модуля
Alexander
просто использование класса иил модуля дает тот же эффект
Класса типов - да Модуль - нет. Тогда должна быть функция а-ля runThisAllStuff :: SomeRuntime -> ModuleStuff -> IO Result
Alexander
класса в смысле class
Alexander
картинка_с_соломенным_самолётом.jpg
Alexander
это будут разные реализации т.к. они будут зависеть от рантайм значений
Пусть будут разные, мне все равно. Я хочу: 1. В интерфейсных функциях ничего не знать про эти рантайм данные 2. Иметь возможность передать эти данные 3. По-прежнему использовать интерфейсные функции, которые под капотом обращаются к рантаймным данным
Alexander
я устал, я мухожук
Alexander
Это типичная задача, которая решается ОО-интерфейсами. И не потому, что "так принято в архитектурках", а потому что клиенту, где мой интерфейс используется, не полагается знать о рантайм-данных, которые я под него подсунул
Alexander
если что-то новое и толковое будет - пните пожалуйста
Alexander
я устал, я мухожук
Ну вот можно что-нибудь из книжек про дизайн и архитектуру в ООП почитать
A64m
там шизофазия
Андрей
там шизофазия
Там сущности😃
кана
если интерпретатор один, то вроде нет разницы
Alexander
у FT и Free изоморфны
Alexander
можно преобразовать одно в другое
Alexander
если интерпретатор один, то вроде нет разницы
Есть, если нужно какую-то дополнительную семантику навешать, но чтобы клиент оставался прежним
Alexander
Например, на каждый вызов операции кидать инфу в лог
Alexander
ЭТО НАЗЫВАЕТСЯ ПОМЕНЯТЬ ИНТЕРПРЕТАТОР
Alexander
/me бьется головой о стол
кана
Например, на каждый вызов операции кидать инфу в лог
хм, но это же уже другой интерпретатор
Alexander
Хочу - в том же интерпретаторе делаю, если так задача решается без проблем
кана
то есть старый стм-интерпретатор меняется новым, который еще логает что-то
Alexander
как можно пытаться учить других и указывать им на книжки не понимая базовых вещей
Alexander
У вас какой-то формалистический подход
Alexander
тем не менее мы тут все друг друга поняли
Alexander
и вроде on the same page, как говорится
Alexander
хотя вроде с разными background-ами и не в одном месте работаем
Alexander
то есть старый стм-интерпретатор меняется новым, который еще логает что-то
Зачем мне их много, если я не планирую первым больше никогда пользоваться?
Alexander
Держать его мертвым грузом в проекте?
Alexander
нет
кана
все, я понял
кана
проблема: есть либа stm, есть код, который ее использует, нужно не меняя этот код добавить логирование
Alexander
Продолжай :)
Alexander
Да, такой кейс например
Alexander
Или метрики снимать.
Alexander
Или еще что.
кана
решение @graninas: сделать интерфейс к либе, который будет будет реализовываться либой, и использовать ее
кана
(очень хороший кейс для окамл-модулей имхо)