
Александр
12.07.2018
06:42:05
Однако здесь можно запользовать линзы и фри монады.

Vasiliy
12.07.2018
06:42:54
Англоязычные Хаскелисты подкинули такой список: 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

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
Тут уже всё нормально. См. тип лямбды до применения

Александр
12.07.2018
06:48:02

Google

Александр
12.07.2018
06:49:47

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 шире.

kana
12.07.2018
06:52:17
но можно принимать полиморфные функции

Евгений
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

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

Евгений
12.07.2018
06:57:30

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 для работы со значением и эффектами без цепочки последовательных операций?

Евгений
12.07.2018
06:59:19

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
моё определение не лучше и не хуже :)
предлагайте свои варианты

kana
12.07.2018
07:05:51

Google

Yuriy
12.07.2018
07:18:18

Ilya
12.07.2018
07:21:51

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

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

Алексей Ayaye :)
12.07.2018
07:51:10

Александр
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

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

Google

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

Fedot
12.07.2018
08:12:20

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
Из живого есть CλaSH

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