Alexander
Похоже на правду
кана
другое решение: просто сделать свой модуль, который будет иметь тот же интерфейс, что stm, но дополнительно логировать
кана
решения одинаковые в случае одного интерпретатора
кана
но что не нравится Александр , что нет разделения и абстракции
кана
кана
то есть "тот же интерфейс" - это скорее неформальная фраза
Alexander
на самом деле у Free ещё бонусы по композабельности эффектов
кана
важный вопрос
Alexander
но формально это новый интепретатор
Alexander
который может делать больше
Alexander
Alexander
в этом случае нужно обобщение
кана
почему там ник, а там имя
Alexander
телеграм меняет
Alexander
меня просто *бесит* когда люди интепретируют технологии как не то, чем они являются
Alexander
Cheese
Alexander
Не то, как некоторые заресечили? Ничья проблема. Подходы должны быть разные
Alexander
при сравнении с другими технологиями навешивают на них дополнительные свойства, как уникальные для технологии
Alexander
становится тяжело разговаривать
Big Bux Chungus
@graninas хм, я тут подумал и понял, что не прав, можно в тайпкласс ФТ запихнуть рантайм значения, надо просто компилировать в Reader (условно)
Alexander
ещё раз FT ~ Free(r)
Big Bux Chungus
да
Alexander
вот вообще 1 в 1
Alexander
можно написать класс который при выполнении построит теги
Alexander
Alexander
и можно написать интерпретатор который fold-ит теги
Big Bux Chungus
если под Free понимать не только free monad, то да
Alexander
а если только?
Зигохистоморфный
ещё раз FT ~ Free(r)
ну как бы да,
FT -> Free (через определение инстанса для FT)
Free -> FT (через катаморфизм/анаморфизм для Free)
Зигохистоморфный
насколько я помню, то и фри интерпретаторы можно экстендить легко
Alexander
у Free(r) и extensible-effects есть хорошие свойства по композабельности эффектов
Alexander
про Free не знаю
Big Bux Chungus
а если только?
data RuleAlg r = RuleAlg {
and :: r -> r -> r
or :: r -> r -> r
not :: r -> r
prefix :: String -> r
}
Alexander
вот тут уже можно говорить про полезность
Зигохистоморфный
Big Bux Chungus
это тоже FT
Зигохистоморфный
ну разновидностей много
Alexander
я не очень понял к чему это было, но class ~ record
Зигохистоморфный
Datatypes a la carte это вообще объединенный подход
Alexander
просто вопрос в наличии когерентности и явности передачи
Big Bux Chungus
это по поводу Free
Big Bux Chungus
в данном случае тебе нужна начальная алгебра, т.е. "free" для RuleAlg будет
data FRule = And FRule FRule | Or FRule FRule | Not FRule | Prefix String
Big Bux Chungus
не уверен, что термин free всё ещё корректно использовать в такой ситуации, но концептуально это и есть аналог Free для (FT-алгебры + Monad)
Big Bux Chungus
Free тебе даёт монаду for free. а тут мы ничего for free не получаем, кроме начального объекта, т.е. возможности сфолдить с помощью любой другой алгебры
Big Bux Chungus
правда и сам Free - тоже начальный объект в какой-то категории
Зигохистоморфный
Big Bux Chungus
не надо, зачем?
Зигохистоморфный
а что ты хочешь построить?
Free FRule?
Зигохистоморфный
каинды не сойдутся
Big Bux Chungus
нет, не хочу
Зигохистоморфный
а так это вообще просто adt
Big Bux Chungus
да
Big Bux Chungus
это к тому, что FT != Free
Зигохистоморфный
cфигали?
Big Bux Chungus
т.к. FT значительно более обширное понятие
Зигохистоморфный
изоморфизм построить можно
Зигохистоморфный
да все есть алгебры, просто в разных категориях
Зигохистоморфный
если уж все рассахарить досконально
Зигохистоморфный
f t -> t есть все структуры
Зигохистоморфный
моноиды, полугруппы
Leonid 🦇
mtl круче free
Leonid 🦇
Зигохистоморфный
Big Bux Chungus
например есть FreeAp
Зигохистоморфный
да какая разница что будет умножением
Big Bux Chungus
ок, есть []
Зигохистоморфный
Compose/ Day convolution
Зигохистоморфный
тут тоже моноид)
Cheese
Зигохистоморфный
да
иногда и я прокалываюсь
Зигохистоморфный
@alexknvl просто какая разница в какой категории моноид?
Зигохистоморфный
FreeMonoid, FreeMonad, FreeApplicative, FreeAlternative, FreeFunctor, FreeProfunctor..
Зигохистоморфный
есть единица и есть умножение