Bonart
ну просто оверинженирингом пахнет
На сишарпе иногда приходится, чтобы вывод типов нормально пахал
Bonart
Но в начале леща
Я рад, что по следующим пунктам разногласий нет
Vasily
Ну на сишарпе много оверинжиниринга
Bonart
Ну на сишарпе много оверинжиниринга
Оверинжиниринг - это вопрос программиста, а не языка. На сишарпе кое-что приходится писать многословно.
Vasily
Ну вот я ща смотрю в код, и понимаю, что там адовый оверинжиниринг
Bonart
Ну вот я ща смотрю в код, и понимаю, что там адовый оверинжиниринг
Оверинжиниринг=перепроектирование. Что ты, как программист, сделал бы на сишарпе иначе?
gsomix
Мне кажется, тут уже достаточно просто написать "Визитор", и все гореть начнут. :)
Bonart
> Следовательно, контакт будет представлен абстрактным базовым классом Зверь Пицзецы подкрался незаметно
gsomix
Зачем? Это всего лишь жалкое подобие классов типов.
Вообще это нормальный энкодинг типов-сумм.
Bonart
Вообще это нормальный энкодинг типов-сумм.
Нормальный=часто встречающийся? Не знаю, по мне так ядреный костыль
x
Мб Влашчын
https://www.howtopronounce.com/wlaschin/
x
Веласкин )
gsomix
Нормальный=часто встречающийся? Не знаю, по мне так ядреный костыль
Как минимум это идиоматичный подход. Альтернативные решения?
Bonart
https://www.howtopronounce.com/wlaschin/
Какой смысл на русском произносить как на английском?
x
чтобы он откликался )
Roman
Веласкин )
внезапно конечно
gsomix
Нормальный=часто встречающийся? Не знаю, по мне так ядреный костыль
Вот, например, в F# нет экзистенциальных типов и rank-n полиморфизма. Является ли их энкодинг через ООПшную систему типов .NET костылем?
gsomix
Дженерик методы и визитор.
Анна
gsomix
Оп, и система типов .NET оказывается мощнее, чем то, что предлагается в фп-части F# (записи, DU, модули и функции). ;)
gsomix
Проблема только в эффективности. Все-таки эти энкодинги не zero-cost.
gsomix
Можно даже GADT закодировать. http://www.fssnip.net/mq/title/An-attempt-at-encoding-GADTs
gsomix
Ну, а эффективные explicit type classes вы все видели (Classes for the Masses).
Анна
@gsomix existential packing - это сокрытие деталей реализации по сути?
Vasily
Оверинжиниринг=перепроектирование. Что ты, как программист, сделал бы на сишарпе иначе?
Ну как минимум платежные ордера не стал бы по разным таблицам разносить
Анна
Надо ещё разок трудов Карделли курнуть 🤔
Анна
gsomix
Блин, я всех распугал кажется.
gsomix
А так хорошо горели...
Vladislav
я просто не понимаю ничего ни за тайпклассы ни концепты и что-то еще
Ayrat
Блин, я всех распугал кажется.
Я ща вброшу за всех, всё что ты написал - дичь, т.к. всё можно закодить на Brainfuck
Vladislav
поэтому молчу
Vladislav
видимо надо скалы\хаскели тыкать надо чтобы происходящее понять
Ayrat
и потом выходит на сцену @gsomix и говорит НИКАКОГО ОВЕРИНЖИРИНГА в HKT на Брейнфаке нет, просто ОЧЕНЬ ДОХУЯ кода, но это нормально и система типов там мощнее хаскеля, т.к. нет ограничений!
Ayrat
поэтому любые аргументы вида "на языке А можно сделать такую же лабуду что и на языке Б" несостоятельны, т.к. это априори верно для туринг-камплит языков поэтому мы можем сравнивать только количество усилий которое надо приложить для достижения того или иного результата
x
что такое мощность применительно к типам? оно поможет мне круды мои написать?
Ayrat
и если взять брейнфак, C# и хаскель, выйдет что закодить что-то страшноабстрактнотипизированное на хаскеле просто, на C# сложно, на брейнфаке только теоретически возможно, но я уверен никто не возьмётся
Ayrat
Блин, это максимал тупо.
а я смотрю, всё ж пригорело, признай :D
gsomix
Я с нормальных вещей зашел — энкодинг типов-сумм в C# (все знают про визитор) и экзистенциальных типов в TypeShape (полезно же!) :)
Vasily
АХАХАХА
gsomix
Давайте в рамках нормальных вещей и оставаться.
gsomix
// забыли про гадты
Vladislav
что такое гадт
x
жара
Ayrat
что такое гадт
женерализированные алгебратические дата типы
Анна
Ayrat я уже почти доделала следующую лабу! Скоро выложу
gsomix
что такое гадт
type Expr<'T> = | Const of 'T -> Expr<'T> | Add of Expr<int> -> Expr<int> -> Expr<int> | IfThenElse of Expr<bool> -> Expr<'T> -> Expr<'T> -> Expr<'T> | App of Expr<'T -> 'S> -> Expr<'T> -> Expr<'S> | Lam of (Expr<'T> -> Expr<'S>) -> Expr<'T -> 'S> | Fix of Expr<('T -> 'S) -> 'T -> 'S> -> Expr<'T -> 'S>
Ayrat
Ayrat я уже почти доделала следующую лабу! Скоро выложу
по ракету? отлично! а уровень пожоще будет?
Vasily
Анна
по ракету? отлично! а уровень пожоще будет?
надо интерпретатор написать для игрушечного языка и потом немного кода на нём. Выворачивать мозг наизнанку вроде не надо, но кода кажется побольше 🤔
Ayrat
вот тут ещё https://en.wikibooks.org/wiki/Haskell/GADT
gsomix
По моему самое классное введение в gadt которое я встречал https://www.cl.cam.ac.uk/teaching/1516/L28/gadts.pdf
Ayrat
на студентоте
Анна
а ты первую лабу уже в боевых условиях тестила?
по ней скоро дедлайн. Боюсь смотреть пока, что наприсылали
gsomix
это же фшарп
В F# так низя.
Ayrat
это же фшарп
как правильно заметил @gsomix, тебе придётся дженерик параметр 'S вводить как аргумент в тип Expr
Ayrat
и тут наступает жопица
Анна
Ayrat
6 человек уже сдали. Надо проверять
дай мне посмотреть, я хочу со своими решениями сравнить, почерпну нового
gsomix
А я уже почти привык к golang. И правда быстро учится. 🙃