Dr. Friedrich
А, там было .id
Dr. Friedrich
Не юзай enumeration.
А что юзать?
Dr. Friedrich
Как в жаве, публичные поля интовые?
Doge
А что юзать?
Как в хаскеле или F#
Doge
Обьявляй ADT
Romɑn
@DogeShibu расскажи лучше юзкейс для match types? я пример видел, но ничего не понял
Dr. Friedrich
Как в хаскеле или F#
К сожалению, в F# тоже всё очень плохо с энумами :(
Dr. Friedrich
Ну, не то чтобы очень, а просто не круто
Dr. Friedrich
https://dotty.epfl.ch/docs/reference/enums/enums.html#implementation собстно тут вот написано, что в скале энумы норм!
Dr. Friedrich
Ну, почти
Dr. Friedrich
Номер есть у них, уже хорошо
Dr. Friedrich
И по дефолту sealed, что тоже хорошо
Dr. Friedrich
Разве что флаговые энумы ещё надо научиться делать, и вообще будет норм, совсем как надо.
Doge
Флаги для них не нужны
Dr. Friedrich
Тут энамы - это АДТ
Ты мне голову-то не забивай.
Dr. Friedrich
Я вижу, в коде ок написано
Dr. Friedrich
Если где-то не ок, то там буду критиковать.
Romɑn
норм энамы же.
Romɑn
адт или не адт это уже другой вопрос
Doge
Я вижу, в коде ок написано
https://dotty.epfl.ch/docs/reference/enums/adts.html Тут синтаксис один для энамов и адт, и гадт
Dr. Friedrich
Dr. Friedrich
В смысле, что значит не нужны? Кому не нужны?
Dr. Friedrich
Мне нужны.
Doge
О чем я и говорю
Dr. Friedrich
Хорошее изменение!
Romɑn
Мне нужны.
чтоб можно было делать Color.Red | Color.Green
Dr. Friedrich
Плохая идея называть что попало энумами, конечно
Dr. Friedrich
Но ладно уж, пусть будет
Dr. Friedrich
Шоб кейворд лишний не заводить, наверное.
Doge
Собача, ты лучше тут понуди
Для вычислений на уровне типов.
Romɑn
Для вычислений на уровне типов.
теперь стало понятнее)
Romɑn
я про практическийц пример)
Romɑn
понятно, что на типах можно сразу кучу логичского сделать
Dr. Friedrich
я про практическийц пример)
Ну хочешь конкатенацию векторов сделать
Dr. Friedrich
Длину результата надо вычислить
Dr. Friedrich
На уровне типов
Dr. Friedrich
Наверное, вот для этого!
Romɑn
наверное я тупой
Dr. Friedrich
Шоб результат операции Vector<1> + Vector<2> был Vector<3>
Dr. Friedrich
Круто же, полезно.
Romɑn
наверное я тупой
ну как наверное, надо это еще доказать на уровне типов
Romɑn
а Матс Тайп здесь причем?
Dr. Friedrich
Откуда я знаю?
Dr. Friedrich
Но вот тебе практический пример вычислений
Dr. Friedrich
А как их там сделать — это вот пусть академики скажут тебе
Dr. Friedrich
На жавошных энумах, если им так угодно
Romɑn
в примере красиво, но не понятно как в коде это аыглдит и пример синтетика явно
Romɑn
Откуда я знаю?
https://youtu.be/_Rnrx2lo9cw?t=1976
Romɑn
знай
Dr. Friedrich
https://youtu.be/_Rnrx2lo9cw?t=1976
А что из этого match type?
Dr. Friedrich
Я вижу
Dr. Friedrich
Romɑn
Я вижу
https://dotty.epfl.ch/docs/reference/new-types/match-types.html
Dr. Friedrich
Вот из этого что является match type? Concat?
Romɑn
вот доа
Romɑn
дока
Romɑn
поэтому и вопрос
Dr. Friedrich
> A match type reduces to one of a number of right hand sides, depending on a scrutinee type.
Dr. Friedrich
scrutinee
Dr. Friedrich
Всё ясно!
Dr. Friedrich
А, чувачки
Dr. Friedrich
Это ж просто фича из тайпскрипта
Romɑn
а мне нет, я не доказал что я умный на уровне типов
Romɑn
Всё ясно!
делись
Dr. Friedrich
Ну это тупо свитч на уровне типов, рили понятно
Dr. Friedrich
Без всяких там scrutinee
Dr. Friedrich
Хорошая фича.
Romɑn
type Elem[X] = X match { case String => Char case Array[t] => t case Iterable[t] => t } я такого в TS не помню
Romɑn
Match types are also similar to Typescript's conditional types. The main differences here are:
Romɑn
Match types are also similar to Typescript's conditional types. The main differences here are:
https://github.com/Microsoft/TypeScript/pull/21316 внезапно