@haskellru

Страница 832 из 1551
Denis
09.02.2018
14:39:43
если нам нужен подязык (ограниченный) то Free monad если же нам нужен полноценный язык в языке программирования то рекурсивные схемы, алгебры и так далее

kana
09.02.2018
14:40:09
там можно написать if balance > 100 then done else pure () это обычный монадный when

Alexander
09.02.2018
14:41:36
если нам нужно пространство для оптимизации нахаляву то Freer, если очень много - то Free

Dmitry
09.02.2018
14:41:36
окей, функция example - конструирует или выполняет?

Google
Denis
09.02.2018
14:41:48
тем более фримонады тоже можно сворачивать катаморфизмами используя как базовый функтор FreeF для неподвижной точки Free

Dmitry
09.02.2018
14:41:55
@qnikst так, халява есть во Freer ?

Alexander
09.02.2018
14:42:06
и там и там

но просто Freer тормозит, а Free ТОРМОЗИТ

Dmitry
09.02.2018
14:42:35
а почему?

Denis
09.02.2018
14:42:35
@qnikst так, халява есть во Freer ?
ну Freer это Coyoneda + Free а значит это бесплатный и функтор и монада

kana
09.02.2018
14:42:37
окей, функция example - конструирует или выполняет?
конструирует, но после каждого bind, который отдает значение из интерпретатора (читаем из базы), конструирование откладывается до получения значения

Alexander
09.02.2018
14:42:40
и это красивее, чем threadDelay 100 по всей программе расставить и потом удалять по 10 за спринт

@voidlizard особенности реализации

вообще Free(r) прикольная тем

тема

Dmitry
09.02.2018
14:43:17
пока всей обнаруженной халявы это отсутствие необходимости писать монадические конструкторы

Alexander
09.02.2018
14:43:27
но как-то случаев где это действительно надо не то чтобы миллионы

Google
Dmitry
09.02.2018
14:43:29
но это блин такая мелочь по сравнению с остальным.

Александр
09.02.2018
14:43:34
окей, функция example - конструирует или выполняет?
Мне не очень ясен сам вопрос. Но в DSL есть только то, что есть в вашем соответствующем типе. И только это можно интерпретировать/преобразовывать/etc. Если хотите что-то еще преобразовывать (условные конструкции и т.п), это нужно вносить в ваш язык.

Denis
09.02.2018
14:43:35
вообще Free(r) прикольная тем
там же есть прокаченная версия очередей, что вроде ускоряет?

Alexander
09.02.2018
14:43:36
мне чаще разные dsl надо композить

как это делать с Free я не знаю

поверх datatypes la carte делать свободные структуры?

Dmitry
09.02.2018
14:44:06
Александр ну конечно, хочу преобразовывать

Alexander
09.02.2018
14:44:07
спасибо, я их и так не осилил

Dmitry
09.02.2018
14:44:10
как правило это всегда нужно

несколько примеров прямо таки в статье про поиски жирного, которую я постил

у и там типичная ситуация

Александр
09.02.2018
14:44:36
но просто Freer тормозит, а Free ТОРМОЗИТ
Достаточно для того, чтобы на серверном purescript-коде исполнять сотни операций в секунду

Alexander
09.02.2018
14:44:42
mtl/final tagless это позволяет композить

kana
09.02.2018
14:45:08
mtl/final tagless это позволяет композить
так FreeT есть, композить несколько дслек не сложно

Denis
09.02.2018
14:45:28
Alexander
09.02.2018
14:45:34
больше mental work, for no reason

Dmitry
09.02.2018
14:45:49
еще раз - весь этот угар, что бы монадические конструкторы не писать?

Alexander
09.02.2018
14:46:08
если действительно, нужны разные интерпретаторы, то имеет смысл об этом думать

Denis
09.02.2018
14:46:08
Достаточно для того, чтобы на серверном purescript-коде исполнять сотни операций в секунду
у пурсы там все оптимизашки написаны для Free а это remorse и прочее

Google
Alexander
09.02.2018
14:46:25
но обычно это не нужны разные интепретаторы, а ЗАТО МЫ МОЖЕМ ДЕЛАТЬ РАЗНЫЕ ИНТЕРПРЕТАТОРЫ

т.е. обобщение ради обобщения

Dmitry
09.02.2018
14:47:05
да, потому чт обычно нужен конструктор (парсер), оптимизатор, валидатор, генератор

констант пропагатор

дед код элиминатор

тэйл колл оптимизатор

ну так далее, и так далее

коммон код обобщатор

ParkeT
09.02.2018
14:48:03
Ой я не могу. ?

Похоже на проектные требования ?

kana
09.02.2018
14:48:16
фри все же не про генерацию кода, про которую ты пишешь, тут какой-то спор об разных темах, каждый думает о своем

Dmitry
09.02.2018
14:48:27
да я и пытаюсь понять

т.е например для того, что бы пыщь пыщь написали код забыли логи

Denis
09.02.2018
14:48:43
но обычно это не нужны разные интепретаторы, а ЗАТО МЫ МОЖЕМ ДЕЛАТЬ РАЗНЫЕ ИНТЕРПРЕТАТОРЫ
ну я что-то совсем гипотетически нужное могу представить, если f параметризован во фри еще чем-то, но я хз что дальше с этим делать

Dmitry
09.02.2018
14:48:47
а тут такие и берем, переопределяем инстанс и добавляем туда логинг

победа

Александр
09.02.2018
14:48:58
Александр ну конечно, хочу преобразовывать
Ну вот в том моем кейсе с персистентными сценариями была задача - передавать сценарии в виде Free -DSL кода. Но как, если есть только методы для дергания сервисов и БД? Нету никаких if, case, и тд. Как сериализовать сам сценарий, написанный на PureScript и этом DSL, но чтобы управляющие конструкции тоже сериализовались? Только вносить их в язык в виде отдельных методов. Но мы решили не идти этим путем, потому что мы можем просто передавать browserified JS, созданный по PureScript-cценарию, и его уже загружать пьюрескриптным движком Workflow. И все получилось.

Dmitry
09.02.2018
14:49:30
а можно было просто так -- Вася, ты забыл вставить логи log [qc|WTF {a} {b}|] тут дальше код

конечно, можно скзаать, что нам надо не просто писать логи, а еще внезепно писать в базу

читать из базы

Google
Dmitry
09.02.2018
14:50:11
слать в сокет

и еще что-то. ну ок

и при этом не трогая базовый код, написанный архитектором годы назад

и который нельзя трогать.

Denis
09.02.2018
14:51:14
а тут такие и берем, переопределяем инстанс и добавляем туда логинг
или делаем монадическую алгебру и паратримизируем любой монадой, например writer или любая другая а монадический катаморфизм это все свернет в то, что нам надо вместе с эффектом

Dmitry
09.02.2018
14:51:21
но если так писать всё, то программа внезапно превращается в интерпретируемую, нет?

Alexander
09.02.2018
14:51:27
да

причем в несколько

Dmitry
09.02.2018
14:51:40
и при этом ограниченную в выразительных средствах

Александр
09.02.2018
14:51:59
конечно, можно скзаать, что нам надо не просто писать логи, а еще внезепно писать в базу
Ну вот смотри. У тебя сотни сценариев на твоем free dsl. Тебе не хочется везде логи пихать. Ты идешь в интерпретатор, где только 20 методов, вставляешь в каждый по соответствующему логу, и все твои сотни сценариев начинают отлично логгироваться.

Alexander
09.02.2018
14:52:21
т.е. интерпретатор чтобы записать программу в байткод, читалку байткода и интерпретатор

но тут есть бонус что структуру все этого можно расшарить

и с явным словарём

Dmitry
09.02.2018
14:53:02
ну да, в общем-то все должно прийти к тому, что если мы не хотим, что бы это люто-бешено тормозило, мы получим таки первосортный AST

его оптимизируем

Александр
09.02.2018
14:53:17
с mtl тоже самое
Я этого не отрицаю.

Dmitry
09.02.2018
14:53:19
а потом напишем или на трамплинах, или на llvm/ir генератор кода, который будет быстро работать

ну как быстро

быстрее.

Google
Alexander
09.02.2018
14:53:28
https://markkarpov.com/post/free-monad-considered-harmful.html свежачок

не то, чтобы я был полностью согласен

Александр
09.02.2018
14:54:25
https://markkarpov.com/post/free-monad-considered-harmful.html свежачок
Так это кликбайт. Внутри-то хорошее написано.

Dmitry
09.02.2018
14:54:41
я пытаюсь сказать, что идея писать внутри хаскеля на каком-то обрезаном язычке обречена, только если в виде исключений. причем в части исключений совершенно точно должен быть внешний dsl

Denis
09.02.2018
14:54:42


Dmitry
09.02.2018
14:54:54
т.е что бы дать возможность гражданским пользоваться функциями нашей системы на хаскеле

Alexander
09.02.2018
14:55:09
> Conclusion > Of course the title is a click bait and I do not mean to be so categorical. Free monads do have their uses, but in most cases I’d think twice before committing to that style of programming because it’s somewhat tedious and inefficient (unless you’re careful). So the post is just a fair warning and a demonstration of alternative solutions.

Dmitry
09.02.2018
14:55:12
идея, что не хаскелисты будут писать на edsl внутри хаскеля = провал

Alexander
09.02.2018
14:56:05
понятно, что задачи и толк для freemonad есть

Dmitry
09.02.2018
14:56:14
(всё еще ищу)

kana
09.02.2018
14:56:19
я пытаюсь сказать, что идея писать внутри хаскеля на каком-то обрезаном язычке обречена, только если в виде исключений. причем в части исключений совершенно точно должен быть внешний dsl
да это не урезанный язык, это тот же хаскель, весь, просто вместо реального вызова эффектной функции у нас дыра, которая потом заменяется на что-то эффектиное в интерпретаторе

Alexander
09.02.2018
14:56:31
вон то, что у Александр подходит

Александр
09.02.2018
14:56:34
(Индийская компания финансовая)

Alexander
09.02.2018
14:57:01
там компилятор, интерпретатор, валидатор будут написаны достаточно просто и с одной структурой

особенно если на скорость плевать

kana
09.02.2018
14:57:14
это как когда мы хотим сделать 3 операции над списком, мы сначала создаем список x = Cons 1 (Cons 2 Nil) с тремя дырами (Cons, Cons, Nil) а потом в foldr заменяем все Cons на функцию, а Nil на значение тремя разными способами (пара (a -> b -> b, b) - это и есть интерпретатор списка) a = f 1 (f 2 z1) b = g 1 (g 2 z2) Free собствено это тоже почти список

Dmitry
09.02.2018
14:58:11
Александр я верю, что любую дурь может кто-то делать

люди сначала в уши вставляют себе туннели диаметром с кулак

Александр
09.02.2018
14:58:33
Студенты. Индусы. Интерны. Вы, что ли, хуже?

Dmitry
09.02.2018
14:58:38
потом вынимают и уши обрезают/зашивают

т.е нет предела

Страница 832 из 1551