@haskellru

Страница 1334 из 1551
Александр
12.07.2018
06:42:05
Всем привет. Часто слышу, что Хаскель хорош для написания EDSL-ей. На какие библиотеки нужно посмотреть, чтобы убедиться в этом высказывании?
eESL - это не про библиотеки, а про дизайн предметно-ориентированного кода. Вообще можно без каких-либо библиотек это делать.

Однако здесь можно запользовать линзы и фри монады.

Vasiliy
12.07.2018
06:42:54
eESL - это не про библиотеки, а про дизайн предметно-ориентированного кода. Вообще можно без каких-либо библиотек это делать.
я имел ввиду, что кто-то наверняка своял библиотеки, интерфейс которых выглядит как отдельный мини-язык

Англоязычные Хаскелисты подкинули такой список: SBV diagrams pandoc? accelerate blaze esqueleto shake lens? gloss

Google
kana
12.07.2018
06:43:39
линзы

Aleksey
12.07.2018
06:43:48
Если отдельный, то это не eDLS

Александр
12.07.2018
06:43:56
shadowjack
12.07.2018
06:43:57
Prelude> :t Just . Just Just . Just :: a -> Maybe (Maybe a) Prelude> :t \f -> f . f $ Just \f -> f . f $ Just :: ((a -> Maybe a) -> a -> Maybe a) -> a -> Maybe a Почему так?

Aleksey
12.07.2018
06:45:38
доллар в лямбду попал

скобки вокруг лямбды нужны

Vasiliy
12.07.2018
06:46:31
Любая библиотека является eDSL до некоторой степени
Тем не менее некоторые можно показать даже не Хаскелисту со словами "смотри, как у нас можно", а другие стыдно самому смотреть. Мне хотелось посмотреть на идеоматичный хаскель код на примере которого можно научится каким-то применимым в жизни подходам. Но, в принципе, я уже нашёл всё что хотел )

Ну и, собвственно, "Хаскель крут для EDSL-ей" звучит круто, на на деле докопаться почему не так уже просто

kana
12.07.2018
06:47:20
Prelude> :t Just . Just Just . Just :: a -> Maybe (Maybe a) Prelude> :t \f -> f . f $ Just \f -> f . f $ Just :: ((a -> Maybe a) -> a -> Maybe a) -> a -> Maybe a Почему так?
ты применяешь Just к f получется f уже принимает (a -> Maybe a) -> b потом ты применяешь f к f, получается, что и отдает f то же, что и на входе: (a -> Maybe a) -> (a -> Maybe a)

shadowjack
12.07.2018
06:47:26
скобки вокруг лямбды нужны
Да, точно. Тогда так Prelude> :t (\f -> f . f) Just <interactive>:1:15: error: • Occurs check: cannot construct the infinite type: b ~ Maybe b Expected type: b -> b Actual type: b -> Maybe b • In the first argument of ‘\ f -> f . f’, namely ‘Just’ In the expression: (\ f -> f . f) Just

Aleksey
12.07.2018
06:47:44
Тут уже всё нормально. См. тип лямбды до применения

Google
Aleksey
12.07.2018
06:49:50
Линзы тоже можно считать eDSL, ок

Александр
12.07.2018
06:50:35
У Сервана часть, ответственная за описание API, самый что ни на есть eDSL, на типах.

Aleksey
12.07.2018
06:50:49
Это просто инфиксные конструкторы же

Впрочем нужно просто определиться с терминологией применительно к Хаскель :)

Александр
12.07.2018
06:51:31
Это может быть чем угодно, если оно выражает предметную область, причем без лишних конструкций

Aleksey
12.07.2018
06:51:36
Если есть набор комбинаторов и функций, предназначенных для решения одной задачи, то это eDSL

Если комбинаторы обобщённые, то не DSL.

Аппликативно-монадные операторы не дают eDSL, например

Александр
12.07.2018
06:52:08
Мое понимание eDSL шире.

Евгений
12.07.2018
06:52:50
По-моему edsl это какое-то слово без смысла

Aleksey
12.07.2018
06:53:06
<*> - это не "язык в языке". foo # color ~ "red" (или как там в диаграммах?) - вполне себе

Евгений
12.07.2018
06:54:30
А персистент это edsl?

Aleksey
12.07.2018
06:55:14
Там есть "набор комбинаторов, пригодных только для решения конкретной задачи"? А то я не помню уже

Квазиквоты postgresql-query, например, это не eDSL. Это настоящий внешний DSL

Евгений
12.07.2018
06:56:00
Ну, для конструирования условий SQL есть комбинаторы

Google
shadowjack
12.07.2018
06:57:08
Тут уже всё нормально. См. тип лямбды до применения
Ага, т.е. Just . Just работает так как Just полиморфный?

Aleksey
12.07.2018
06:57:09
Можно просто "eDSL" в контексте хаскеля заменять на "библиотека комбинаторов"

kana
12.07.2018
06:57:17
нельзя не эндоморфизм скомпозить с собой
имею в виду, что в Just . Just тут два разных just, так как конструктор полиморфен по своему аргументу. первый Just @a :: a -> Maybe a второй уже Just @(Maybe a) :: Maybe a -> Maybe (Maybe a) нужно задать эту квантификацию фручную, хаскель не выводит

Aleksey
12.07.2018
06:57:29
Aleksey
12.07.2018
06:57:39
типа того

А то Control.Applicative ещё чего доброго eDSL назовут :)

"DS" и обозначает как раз ограниченность применимости

Евгений
12.07.2018
06:59:01
Но просто в случае всяких комбинаторов, которые генерят sql, graphviz или css -- понятно, там есть внешний язык, для которого всё конструируется. А можно примеры, где такого языка нет?

kana
12.07.2018
06:59:14
тогда нельзя ли сказать, что Applicative - DSL для работы со значением и эффектами без цепочки последовательных операций?

Aleksey
12.07.2018
06:59:55
Да стрелки по всему коду размазаны хотя бы виде &&& и ***

Aleksey
12.07.2018
07:00:11
Какой то домайн неспецифик язык

kana
12.07.2018
07:00:24
то есть как мы определяем edsl для работы с базой, не зная, что внутри там происходит (через тайпклассы или фри монады), так и applicative, ведь мы тоже не знаем, что там происходит (с неизвестным аппликативом)

Aleksey
12.07.2018
07:00:54
Поэтому давайте вообще этот термин не будем прмименять :) У нас комбинаторы есть

kana
12.07.2018
07:01:54
тут еще дело в нейминге, pure - вполне себе дсльный нейминг, когда мы используем не глагол, но описание результата class EffectsDSL m where pure :: a -> m a apply :: m (a -> b) -> m a -> m b apply (apply (pure (+)) (pure 10)) (pure 20) в общем, я вполне уверенно считаю и считал аппликативы edsl, и даже тут как-то такое обсуждали в контексте pure

Евгений
12.07.2018
07:02:28
@astynax, мне кажется, что твоё "определение" опирается на философскую разницу между общим и всеообщим. А она очень нетривиальна и спекулятивна

Aleksey
12.07.2018
07:05:38
моё определение не лучше и не хуже :)

предлагайте свои варианты

Google
Yuriy
12.07.2018
07:18:18
я имел ввиду, что кто-то наверняка своял библиотеки, интерфейс которых выглядит как отдельный мини-язык
Control.Applicative и Control.Monad, правда, нужно время, чтобы понять, как они работают в роли универсального интерфейса

Александр
12.07.2018
07:22:59
Простите, забыл о его существовании ?

Евгений
12.07.2018
07:30:20
А что щас модно для record-relations mapping в сабже юзать? Я по привычке окунулся в персистент, но НЯП это не авангардно сейчас

Александр
12.07.2018
07:51:34
Опечатка конечно

Aleksey
12.07.2018
07:52:14
embedded embedded-specific language

вполне себе

Встроенный язычок для кодинга под эмбед

Admin
ERROR: S client not available

Aleksey
12.07.2018
07:53:05
eHDL ещё

Alister
12.07.2018
07:53:07
масло масляное

eDHL

shadowjack
12.07.2018
07:53:39
масло масляное
скорее масло . масло

Aleksey
12.07.2018
07:54:16
Не, один embedded, это "встроенный (в хост-язык)", второй embedded - "для встраиваемых систем" же

shadowjack
12.07.2018
07:54:54
ну полиморфизм же

Aleksey
12.07.2018
07:55:12
перегруженный термин

Вот вам eESL, а вот eHDL (от Зефирова, конечно же)

Алексей Ayaye :)
12.07.2018
07:57:11
тут еще дело в нейминге, pure - вполне себе дсльный нейминг, когда мы используем не глагол, но описание результата class EffectsDSL m where pure :: a -> m a apply :: m (a -> b) -> m a -> m b apply (apply (pure (+)) (pure 10)) (pure 20) в общем, я вполне уверенно считаю и считал аппликативы edsl, и даже тут как-то такое обсуждали в контексте pure
а мне иногда кажется, что это должно быть какими-то потрохами, которые должны допускать использование без понимания деталей происходящего. как аналогия - при изучении виртуальных функций в С++ не обязательно знать про таблицы виртуальных функций и другие детали реализации.

kana
12.07.2018
07:59:41
Ну так а аппликатив что делает?

Google
Алексей Ayaye :)
12.07.2018
08:11:08
я к тому, что зачем-то объясняют кухню, а потом жалуются, что порог вхождения высок

это ж всё равно что объяснять устройство плюсового компилятора перед тем как допустить к программированию на плюсах

Alister
12.07.2018
08:12:36
обяснять устройство человека перед тем как допустить к хирургии

Алексей Ayaye :)
12.07.2018
08:13:26
Объясняют же
когда я начинал, о внутреннем устройстве компилятора ничего не знал. и это не мешало

kana
12.07.2018
08:13:55
Внутренности аппликативов скрыты

У нас только интерфейс применения функций

Алексей Ayaye :)
12.07.2018
08:15:26
эм, уточню - я про второй курс на степике. там только и разговоров о внутреннем устройстве стандартной библиотеки )

Александр
12.07.2018
08:15:36
Alister
12.07.2018
08:15:55
я шучу

Александр
12.07.2018
08:16:13
Правильная аналогия была бы - объяснять устройство лазерного скальпеля и томографа на уровне физики процессов

Alister
12.07.2018
08:16:29
на самом деле это скорее патан на курсах первой помощи

Hot
12.07.2018
08:32:27
Как там по канону правильно, бесточечной нотацией писать?

Расскажите бестпрактис по композиции функций в хаскеле плиз.

Ilya
12.07.2018
08:36:27
если сам можешь прочитать на следующий днеь — то нормально

Pineapple
12.07.2018
08:38:48
Лучше через недельку

Бест практис одна — не злоупотреблять

Ilya
12.07.2018
08:43:09
Aleksey
12.07.2018
08:50:20
HHDL, похоже, заброшен
Зато от Зефирова :)

Из живого есть CλaSH

Ilya
12.07.2018
08:58:30
клэш знаю

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