
Александр
10.10.2018
11:38:12
Например, на каждый вызов операции кидать инфу в лог

Alexander
10.10.2018
11:38:25
ЭТО НАЗЫВАЕТСЯ ПОМЕНЯТЬ ИНТЕРПРЕТАТОР
/me бьется головой о стол

Александр
10.10.2018
11:38:54

Google

kana
10.10.2018
11:38:59

Александр
10.10.2018
11:39:10
Хочу - в том же интерпретаторе делаю, если так задача решается без проблем

kana
10.10.2018
11:39:14
то есть старый стм-интерпретатор меняется новым, который еще логает что-то

Alexander
10.10.2018
11:39:14
как можно пытаться учить других и указывать им на книжки не понимая базовых вещей

Александр
10.10.2018
11:39:22
У вас какой-то формалистический подход

Alexander
10.10.2018
11:39:37
тем не менее мы тут все друг друга поняли
и вроде on the same page, как говорится
хотя вроде с разными background-ами и не в одном месте работаем

Александр
10.10.2018
11:40:21
Держать его мертвым грузом в проекте?

Alexander
10.10.2018
11:41:23
нет

kana
10.10.2018
11:41:30

Google

Александр
10.10.2018
11:41:39

kana
10.10.2018
11:41:49
все, я понял
проблема: есть либа stm, есть код, который ее использует, нужно не меняя этот код добавить логирование

Александр
10.10.2018
11:42:23
Продолжай :)
Да, такой кейс например
Или метрики снимать.
Или еще что.

kana
10.10.2018
11:42:56
решение @graninas: сделать интерфейс к либе, который будет будет реализовываться либой, и использовать ее
(очень хороший кейс для окамл-модулей имхо)

Александр
10.10.2018
11:43:20
Похоже на правду

kana
10.10.2018
11:43:47
другое решение: просто сделать свой модуль, который будет иметь тот же интерфейс, что stm, но дополнительно логировать
решения одинаковые в случае одного интерпретатора
но что не нравится Александр , что нет разделения и абстракции

Александр
10.10.2018
11:44:40

kana
10.10.2018
11:45:24
то есть "тот же интерфейс" - это скорее неформальная фраза

Alexander
10.10.2018
11:45:53
на самом деле у Free ещё бонусы по композабельности эффектов

kana
10.10.2018
11:45:58
важный вопрос

Alexander
10.10.2018
11:46:03
но формально это новый интепретатор
который может делать больше

Google

Александр
10.10.2018
11:46:16

Alexander
10.10.2018
11:46:19
в этом случае нужно обобщение

kana
10.10.2018
11:46:28

Alexander
10.10.2018
11:46:41
телеграм меняет
меня просто *бесит* когда люди интепретируют технологии как не то, чем они являются

Александр
10.10.2018
11:47:25

Yuriy
10.10.2018
11:47:37

Александр
10.10.2018
11:47:43
Не то, как некоторые заресечили? Ничья проблема. Подходы должны быть разные

Alexander
10.10.2018
11:48:12
при сравнении с другими технологиями навешивают на них дополнительные свойства, как уникальные для технологии
становится тяжело разговаривать

alexknvl
10.10.2018
11:49:39
@graninas хм, я тут подумал и понял, что не прав, можно в тайпкласс ФТ запихнуть рантайм значения, надо просто компилировать в Reader (условно)

Alexander
10.10.2018
11:50:04
ещё раз FT ~ Free(r)

alexknvl
10.10.2018
11:50:14
да

Alexander
10.10.2018
11:50:20
вот вообще 1 в 1
можно написать класс который при выполнении построит теги

Александр
10.10.2018
11:50:48

Alexander
10.10.2018
11:50:50
и можно написать интерпретатор который fold-ит теги

alexknvl
10.10.2018
11:51:06
если под Free понимать не только free monad, то да

Alexander
10.10.2018
11:51:23
а если только?

Denis
10.10.2018
11:51:24
ещё раз FT ~ Free(r)
ну как бы да,
FT -> Free (через определение инстанса для FT)
Free -> FT (через катаморфизм/анаморфизм для Free)

Google

Denis
10.10.2018
11:52:05
насколько я помню, то и фри интерпретаторы можно экстендить легко

Alexander
10.10.2018
11:52:06
у Free(r) и extensible-effects есть хорошие свойства по композабельности эффектов
про Free не знаю

alexknvl
10.10.2018
11:53:33
а если только?
data RuleAlg r = RuleAlg {
and :: r -> r -> r
or :: r -> r -> r
not :: r -> r
prefix :: String -> r
}

Alexander
10.10.2018
11:53:35
вот тут уже можно говорить про полезность

Denis
10.10.2018
11:54:09

alexknvl
10.10.2018
11:54:20
это тоже FT

Denis
10.10.2018
11:54:33
ну разновидностей много

Alexander
10.10.2018
11:55:06
я не очень понял к чему это было, но class ~ record

Denis
10.10.2018
11:55:12
Datatypes a la carte это вообще объединенный подход

Alexander
10.10.2018
11:55:20
просто вопрос в наличии когерентности и явности передачи

alexknvl
10.10.2018
11:55:23
это по поводу Free
в данном случае тебе нужна начальная алгебра, т.е. "free" для RuleAlg будет
data FRule = And FRule FRule | Or FRule FRule | Not FRule | Prefix String
не уверен, что термин free всё ещё корректно использовать в такой ситуации, но концептуально это и есть аналог Free для (FT-алгебры + Monad)
Free тебе даёт монаду for free. а тут мы ничего for free не получаем, кроме начального объекта, т.е. возможности сфолдить с помощью любой другой алгебры
правда и сам Free - тоже начальный объект в какой-то категории

Denis
10.10.2018
12:05:12

alexknvl
10.10.2018
12:05:39
не надо, зачем?

Denis
10.10.2018
12:06:18
а что ты хочешь построить?
Free FRule?
каинды не сойдутся

Google

alexknvl
10.10.2018
12:06:26
нет, не хочу

Denis
10.10.2018
12:06:35
а так это вообще просто adt

alexknvl
10.10.2018
12:06:38
да
это к тому, что FT != Free

Denis
10.10.2018
12:06:58
cфигали?

alexknvl
10.10.2018
12:07:03
т.к. FT значительно более обширное понятие

Denis
10.10.2018
12:07:04
изоморфизм построить можно

Yuriy
10.10.2018
12:07:04

Denis
10.10.2018
12:07:39
да все есть алгебры, просто в разных категориях
если уж все рассахарить досконально
f t -> t есть все структуры
моноиды, полугруппы

Dmitry
10.10.2018
12:08:25

Leonid
10.10.2018
12:08:27
mtl круче free

Denis
10.10.2018
12:08:37

alexknvl
10.10.2018
12:08:56

Leonid
10.10.2018
12:09:07

Denis
10.10.2018
12:09:32