>В библиотеках комбинаторов обычно ничего такого мудрёного нету, чтоб их целесообразно было ещё какими-то DSL, EDSL или подъязыками называть.
Вообще-то, именно их и называют EDSL. Это синонимы.
Если мы повторяем синтаксис стороннего языка в языке носителе, то это называется EDSL. Так уж получилось, что применение функций и абстрагирование позволяет повторить (с точностью до синтаксических преобразований) синтаксис многих других языков.
Термин появился задолго до того, как вы стали изучать Scala. Я столкнулся с ним в 1999-ом, в контексте комбинаторов синтаксического разбора.
>Вот, смотрите:
Я не могу это читать. У меня голова по-другому работает. Я не для того решил в 1998 году уйти от объектов и наследований, чтобы возвращаться обратно.
Дайте мне алгебраическую структуру и я счастлив.
>А как они помогут пронаблюдать имя переменной лямбды и имена свободных термов?
Применением.
instance (B a, G b) => G (a -> b) where
dadam f = do
a <- inventArg
b <- applyG f a
dadam b
Примерно так.
Внутри функции f будут известны её параметры, как переменные.
no subject
Вообще-то, именно их и называют EDSL. Это синонимы.
Если мы повторяем синтаксис стороннего языка в языке носителе, то это называется EDSL. Так уж получилось, что применение функций и абстрагирование позволяет повторить (с точностью до синтаксических преобразований) синтаксис многих других языков.
Термин появился задолго до того, как вы стали изучать Scala. Я столкнулся с ним в 1999-ом, в контексте комбинаторов синтаксического разбора.
>Вот, смотрите:
Я не могу это читать. У меня голова по-другому работает. Я не для того решил в 1998 году уйти от объектов и наследований, чтобы возвращаться обратно.
Дайте мне алгебраическую структуру и я счастлив.
>А как они помогут пронаблюдать имя переменной лямбды и имена свободных термов?
Применением.
instance (B a, G b) => G (a -> b) where dadam f = do a <- inventArg b <- applyG f a dadam bПримерно так.Внутри функции f будут известны её параметры, как переменные.
См. также REPA и Accelerate.