Alexander
На PureScritp'е мы сейчас Web UI делаем с помощью портированного нашим коллегой reflex-dom:
https://github.com/restaumatic/purescript-specular
Зигохистоморфный
хм
Зигохистоморфный
а зачем портировать рефлекс если есть почти такой же purescript-behaviors?
Alexander
Это лучше у коллеги спросить. Может, ему не хватало самовыражения.
Влод
а вот например в halogen тоже вроде поначалу сигналы были и всякое фрп. в 0.4 вроде
чому они отказались?
A64m
Dmitry
нормально собираться и собирать проекты
Dmitry
ставиться из каких-то источников
Dmitry
нормальных.
Dmitry
находиться под активной разработкой, работать над компактизацией кода и оптимизацией
Зигохистоморфный
Dmitry
web assembly ?
Dmitry
я что-то не уверен насчёт "нормально", у нас сборка одного проекта даже с никсом занимает часов пять
Зигохистоморфный
web assembly ?
так ghcjs и так собирает некую стейт машину что работает быстро
Dmitry
и от этого возникает сильнейшее недовольство заказчика, например
Dmitry
короче всё это не выглядит, как что-то надежное / годное, а выглядит как маргинальное ответвление, это если еще сам ghc не считать чем-то маргинальным
Alexander
не шляпа конечно, но и не панацея
Free монады - очень нужная концепция. Free-монадические языки решают ту же проблему, которую решают ООПшные интерфейсы, но в чисто функциональном стиле. Проблема называется коротко: Inversion of Control.
Free-монады можно использовать в друх вариантах:
- scenario-oriented eDSL
- API-oriented eDSL
Scenario-oriented eDSLs - это такие языки, на которых вы пишете бизнес-логику. Выражают предметную область, процессы и данные в ней. Такой DSL обычно спроектирован так, чтобы его методы были композабельные.
API-oriented eDSL - это интерфейс к подсистеме. Композабельности методов относительно друг друга не требует, может представлять просто набор методов, абстрагирующих сервис.
Зигохистоморфный
Dmitry
когда я их смотрел, то столкнулся с проблемой уже на уровне реализации ветвлений
Dmitry
вот именно это и напрягает
A64m
компиляция в вебасембли, может быть, ghcjs со временем убьет, но по-моему, и само будущее вебасембли под вопросом
Alexander
Dmitry
с тем, что было неочевидно, как делать ветвления в сценариях.
Alexander
Ну просто if или case
Dmitry
если где-то есть пример - я бы взглянул. вроде бы очевидная вещь, если мы говорим про dsl
Alexander
У меня есть кой-какие примеры, да
Dmitry
доступны что бы посмотреть?
Dmitry
ну опять же, можно спросить например @qnikst почему они у себя не используют фри монады, а используют подход, о котром он рассказывал
Dmitry
хм, пожалуй, я бы посмотрел на какие-то более полные примеры и в контексте
Dmitry
может быть, уже есть более лучшие статьи по фримонадам, чем были год - два назад
Alexander
доступны что бы посмотреть?
Да, у меня же для этого целый showcase проект есть (сопровождает книгу):
https://github.com/graninas/Andromeda/blob/master/test/Test/ControlProgramSpec.hs
Alexander
Dmitry
что-то тут какое-то недопонимание.
Dmitry
явно.
Alexander
Поясните тогда
Dmitry
ну это надо найти статью, где описывалось применение
Denis
Denis
мне кажется тут про разное
Dmitry
@qnikst рассказывал, как они композят разные системы - это вот реализация явных API
Dmitry
будем считать, что я ничего не знаю про них - это почти правда, я посмотрел, попробовал использорвать и забыл - и пытаюсь их адаптировать.
Alexander
Есть еще более продвинутый вариант - freer-монады. Мы их как раз сейчас в проекте используем.
Dmitry
т.е что решают, как решают, почему это лучше, чем решение без них
Dmitry
т.е то, о чем была статья - это просто реализация некоего Dsl, интерпретация которого могла меняться в зависимости от.
Зигохистоморфный
Dmitry
не слишком впечатляло
Denis
do-нотация из коробки, параметризуется функтором.
Denis
я тоже не пользуюсь, кстати
Dmitry
ну вот, допустим
Leonid 🦇
в 95% случаев mtl-style заруливает фримонады
Dmitry
нам нужно сделать некую нотацию, которая бы в зависимости от ситуации либо генерировала бы некий парсер, либо, наоборот, генератор
Dmitry
чего-то, что этот парсер должен уметь парсить
Dmitry
довольно типичная задача, вроде бы.
Leonid 🦇
Denis
Dmitry
ну ок, есть какие-то короткие примеры, которые показывают, как работает этот подход?
Dmitry
ну т.е прошу понять правильно - это все звучит очень похоже на просто dsl и просто его интерпретатор
Dmitry
и его монадический билдер
Leonid 🦇
Alexander
чем оно лучше mtl?
mtl захламляет код. А с Free-монадическим языком у вас, по сути, есть только предметная область.
Leonid 🦇
mtl захламляет код обоснуйте
Влод
Alexander
Ну и mtl-style не интерпретируемый
Leonid 🦇
Напиши другой инстанс - будет другой интерпретатор
Зигохистоморфный
Leonid 🦇
подменяй как хочешь
Влод
алсо хотелось бы услышать пример разных окружений в которых один и тот же код для dsl уместен
Dmitry
@vlastachu +1
Alexander
Alexander
Влод
да
Alexander
В freer-языках мокать более нижние слои легко.
Влод
я про это и подумал
Alexander
Ну и окей, у меня есть еще один пример