Size: a a a

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

2021 December 01

ПС

Павел Соколов... in Типы в языках программирования, моделирования, представления знаний и жизни
О, Антонидзе, а если В -- подтип А, и у А есть неявный конструктор из В, то что произойдёт в коде ниже?

let a: A = (b: B)
источник

АП

Антон Пилипчук... in Типы в языках программирования, моделирования, представления знаний и жизни
думаю что значение будет построено согласно конструктору из B
источник

ПС

Павел Соколов... in Типы в языках программирования, моделирования, представления знаний и жизни
А почему не просто приведение типов?
источник

АП

Антон Пилипчук... in Типы в языках программирования, моделирования, представления знаний и жизни
всё зависит от устройства языка🤷‍♂️
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
Вообще. Это выглядит как темлейты какие-то, а не типы, ну да ладно. С трейтами это пусть и было бы красиво, но, насколько я помню, Антонидзе хочет статику.
Так что, вот этот вот \struct должен быть определенным темплейтом, к примеру Debug или Display, как трейт в расте.
Мы делаем
\type Paren {
   \struct Print : String -> String $ expr = "(" + expr + ")";
}

и у нас темплейт Print раскроется только при print вызове
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
то есть. type-specific macros получается 🤷‍♂️
источник

ПС

Павел Соколов... in Типы в языках программирования, моделирования, представления знаний и жизни
Ну а как в языке обычное приведение типов-то сделать?
источник

K

Kir in Типы в языках программирования, моделирования, представления знаний и жизни
> Антонидзе хочет статику

Так, а шаблоны у него будут? А HKT?
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
темплейты я имею в виду макро-темлпейты, а не плюсовые, ни дай бог
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
но раскрытие макросов после тайп-чека та ещё попаболь будет
источник

ПС

Павел Соколов... in Типы в языках программирования, моделирования, представления знаний и жизни
Про это дело пилят язык Hackett, кстати
источник

АП

Антон Пилипчук... in Типы в языках программирования, моделирования, представления знаний и жизни
дык мне не нужно была привязка только к print
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
ну. неважно. Print это вызов Print, здесь Print это диспатчер репрезентации.
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
Вы можете сделать \repr Print Paren "kek", и получить строку "(kek)" без stdout'а
источник

АП

Антон Пилипчук... in Типы в языках программирования, моделирования, представления знаний и жизни
🤔 а зачем тогда Paren ?

Но возможно вы правы)
источник

АП

Антон Пилипчук... in Типы в языках программирования, моделирования, представления знаний и жизни
стоп..
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
Paren это "структура", не struct как в обычных япах, а как темплейт. Мне казалось вы именно об этом и говорили давно ещё
источник

АП

Антон Пилипчук... in Типы в языках программирования, моделирования, представления знаний и жизни
то есть мне нужно писать
\repr Print Paren str
при каждом использовании любого str , чтобы получить str в скобках ?
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
Paren конструктор, это просто создание. print внутри как раз-таки и вызывает \repr Print a какой-нибудь, где a :: Paren

либо, другими словами можно так

\struct Print {
   \repr : String -> String
}
источник

h

hazer_hazer in Типы в языках программирования, моделирования, представления знаний и жизни
А. Блин. Получились трейты
источник