
Dmitry
07.02.2018
15:03:52
не слишком впечатляло

Denis
07.02.2018
15:03:54
do-нотация из коробки, параметризуется функтором.
я тоже не пользуюсь, кстати

Dmitry
07.02.2018
15:04:31
ну вот, допустим

Google

Leonid
07.02.2018
15:04:46
в 95% случаев mtl-style заруливает фримонады

Dmitry
07.02.2018
15:04:58
нам нужно сделать некую нотацию, которая бы в зависимости от ситуации либо генерировала бы некий парсер, либо, наоборот, генератор
чего-то, что этот парсер должен уметь парсить
довольно типичная задача, вроде бы.

Leonid
07.02.2018
15:05:23

Denis
07.02.2018
15:05:34

Александр
07.02.2018
15:05:38

Dmitry
07.02.2018
15:06:01
ну ок, есть какие-то короткие примеры, которые показывают, как работает этот подход?

Leonid
07.02.2018
15:06:20

Dmitry
07.02.2018
15:06:57
ну т.е прошу понять правильно - это все звучит очень похоже на просто dsl и просто его интерпретатор
и его монадический билдер

Александр
07.02.2018
15:07:14

Leonid
07.02.2018
15:07:27

Google

Александр
07.02.2018
15:07:54
чем оно лучше mtl?
mtl захламляет код. А с Free-монадическим языком у вас, по сути, есть только предметная область.

Leonid
07.02.2018
15:08:33
mtl захламляет код обоснуйте

? animufag ?
07.02.2018
15:08:42

Александр
07.02.2018
15:08:44
Ну и mtl-style не интерпретируемый

Leonid
07.02.2018
15:09:20
Напиши другой инстанс - будет другой интерпретатор

Denis
07.02.2018
15:09:23

Leonid
07.02.2018
15:09:30
подменяй как хочешь

? animufag ?
07.02.2018
15:09:31
алсо хотелось бы услышать пример разных окружений в которых один и тот же код для dsl уместен

Александр
07.02.2018
15:09:42

Dmitry
07.02.2018
15:09:47
@vlastachu +1

Александр
07.02.2018
15:10:25

? animufag ?
07.02.2018
15:11:06
да

Александр
07.02.2018
15:11:06
В freer-языках мокать более нижние слои легко.

? animufag ?
07.02.2018
15:11:12
я про это и подумал

Александр
07.02.2018
15:11:20
Ну и окей, у меня есть еще один пример
Из практики.

Dmitry
07.02.2018
15:11:32
ну, например, ты сначала пишешь модель, модель моделирует, потом из модели генерируется что-то - например verilog
или сишный код
теоретически

Google

Dmitry
07.02.2018
15:11:58
практически.

? animufag ?
07.02.2018
15:12:06
но тут был чел который закинул ссылку на свои эффекты. и я у него спрсоил мол это для тестов/продакшенов и он такой неееее, не только

Dmitry
07.02.2018
15:12:19
ты пишешь сложную программу на некоем урезанном убогом языке необщего назначения
из которого теоретически генерируется си, и промело/спин, что бы этот си верифицировать
с одной стороны, у тебя есть хаскельные типы, но эти типы относятся к хаскелу, а не к твоей программе и генерируют дичайшие ошибки во время компиляции
которые с трудом мапятся на эту программу

Denis
07.02.2018
15:13:54
free отвечает за dsl
cofree за интерпретатор

Dmitry
07.02.2018
15:13:54
ну это вообще судьба всех edsl

Александр
07.02.2018
15:14:02
Вот есть два реальных сервиса по изготовлению и треканию сетов-фактур (invoices):
Infakt
Zoho
Я сделал freer-языки, абстрагирующие эти сервисы.
https://gist.github.com/graninas/1dbe50fb7000f06cc1936768ff501cea

Denis
07.02.2018
15:14:14

? animufag ?
07.02.2018
15:14:36

Denis
07.02.2018
15:15:10

Dmitry
07.02.2018
15:15:37
можно примеры использования этих типов?

Denis
07.02.2018
15:15:55
пора выкладывать свои подборки по free/freer (там много статей и материала)

Александр
07.02.2018
15:16:00
makeFreer?
Да, это реализация от "Takt, Inc":
https://github.com/TaktInc/freer

Dmitry
07.02.2018
15:16:01
пора конечно
если есть, что выкладывать

Denis
07.02.2018
15:16:57
будет такой же лист как по рекурсивным схемам
https://github.com/xgrommx/awesome-functional-programming/blob/master/rsfa.md

Александр
07.02.2018
15:17:51

Denis
07.02.2018
15:18:14
можно примеры использования этих типов?
у меня только когда я моделировал Free через Fix (по хорошему надо через Mu, это в будущем) есть пример для бреинфака))
https://gist.github.com/xgrommx/a92ef9d74e912c69128855589791c3e7

Google

Александр
07.02.2018
15:18:15
Зачем оно мою фотку сюда колбасиииит

kana
07.02.2018
15:20:50
кучу Member можно на Members заменить

Dmitry
07.02.2018
15:21:00
окей, вижу брейнфак

Denis
07.02.2018
15:21:10

Dmitry
07.02.2018
15:21:20
теперь пытаюсь понять профит по сравнению с тем, как если бы мы сделали тоже самое без фри монад вообще.

kana
07.02.2018
15:21:25

Александр
07.02.2018
15:22:01
или лучше на '[]
У нас еще не устоялись гайды. Но в данном случае на точный список лучше не менять. Точный список типов в другом месте у нас
* не использовать

kana
07.02.2018
15:22:23
type family Members ts r :: Constraint where
Members '[] _ = ()
Members (t ': ts) r = (Member t r, Members ts r)
речь не про точный список

Александр
07.02.2018
15:22:48
А, тогда ясно
Да, можно было бы

Leonid
07.02.2018
15:23:26

Dmitry
07.02.2018
15:24:03
я правильно понимаю, что тоже самое можно было бы сделать просто определив тип (AST)

Denis
07.02.2018
15:24:04
@voidlizard мне почему-то казалось что Гонзалес все уже сказал что надо знать http://www.haskellforall.com/2012/06/you-could-have-invented-free-monads.html

Dmitry
07.02.2018
15:24:11
и интерпретатор для значений этого типа
который делает то, что нам надо

Denis
07.02.2018
15:24:45

Leonid
07.02.2018
15:25:04

Google

Leonid
07.02.2018
15:25:26
только писать меньше

Dmitry
07.02.2018
15:25:47
ну т.е

Александр
07.02.2018
15:25:56

Dmitry
07.02.2018
15:26:29
монадическим он становится, если мы делаем монадический edsl, кторый генерирует нам наше AST ?

Leonid
07.02.2018
15:26:51

Александр
07.02.2018
15:26:53
И еще есть полезность в типизации. Freer-сценарии позволяют больше делать с типами входных и выходных значений методов.

Dmitry
07.02.2018
15:26:54
и монадический интерпретатор?
ну хорошо, например вот
https://habrahabr.ru/post/134432/
и вот

Александр
07.02.2018
15:27:08

Dmitry
07.02.2018
15:27:18
https://github.com/voidlizard/emufat

kana
07.02.2018
15:27:42

Александр
07.02.2018
15:27:48

Leonid
07.02.2018
15:27:52

Dmitry
07.02.2018
15:28:09
монадический edsl для описания файловой системы, и интерпретатор, который генерирует байткод который эту файловую систему генерирует и интерпретатор байткода
я так понимаю - это именно наш случай, так?

Александр
07.02.2018
15:28:34

Leonid
07.02.2018
15:28:38

kana
07.02.2018
15:29:06
например? Вроде кроме интерпретатора ничего писать руками не нужно

Dmitry
07.02.2018
15:29:07
можно было бы сделать как-то более лучше при помощи free monads ?

Александр
07.02.2018
15:29:12