Dr. Friedrich
Ну, синтаксис только получше, конечно, чем в тайпскрипте
Romɑn
я и про ТС такого не знал
Romɑn
там тогда мног очег из ТС берется) И юнионы и пересечения и это
Dr. Friedrich
Кстати, про тайпскрипт
Dr. Friedrich
Ещё один пример языка, где энумы совершенно всратые
Romɑn
Это все ещё давно до TS было
хз вижу раздел NEW TYPES
Dr. Friedrich
Это все ещё давно до TS было
Много чего много где было, но в документации ссылаются именно на TS.
Doge
Match types are also similar to Typescript's conditional types. The main differences here are:
Матч типы - это closed type families из хаскеля прежде всего
Romɑn
и там все это
Doge
хз вижу раздел NEW TYPES
В смысле вне TS, а в ресерче
Romɑn
а то ты думаешь я бы вопрос задавал если бы с хачкеллем на ты?
Doge
ты мне пример покажи что ли
Ну я знаю хаскелевские примеры, но они достаточно специфичны
Romɑn
давай
Romɑn
хоть так
Dr. Friedrich
Там про диффы типов, ключи, тайпнеймы всякие
Dr. Friedrich
То, что в Scala не очень нужно.
Dr. Friedrich
ты мне пример покажи что ли
Фича супер клёвая для того, чтобы просто сопоставить типы друг с другом в компилтайме
Dr. Friedrich
Ну вот буквально такой свитчик написать
Dr. Friedrich
Допустим
Dr. Friedrich
У тебя есть актор
Dr. Friedrich
И ты знаешь, что он принимает сообщения типа Int и String
Dr. Friedrich
И отвечает на них Int => String и String => Int
Romɑn
угу
Dr. Friedrich
Теперь ты можешь такого актора типизировать без проблем
Dr. Friedrich
Кстати, в Akka наконец там сделали норм типизированных акторов?
Dr. Friedrich
Уж теперь-то, с такой супер системой типов, это не составит ни малейшего труда?
Dr. Friedrich
Что вообще с Akka под Dotty?
Romɑn
по идее да, там сообзщения должны быть defaultMessageTypes | UserMessages
Dr. Friedrich
Dr. Friedrich
Вроде бы последняя итерация Typed Actors таки прижилась
Doge
давай
Вот, придумал один вариант использования не для вычислений на типах: Когда для некоторых конкретных типов ты используешь оптимизированное представление, а для других - общее match type MyIterator[T] = T match case Char => MyOptimizedCharIterator case _ => Iterator[T]
Dr. Friedrich
Но их до сих пор советуют для каких-то упоротых кейсов
Doge
Кстати, в Akka наконец там сделали норм типизированных акторов?
Сделали, но народ уже в акке относительно разочаровался
Dr. Friedrich
Ну, я имею в виду, конструктор же я у него не вызову
Romɑn
при реализации
Dr. Friedrich
Давай пример как в коде применить такой тип!
Doge
Так что с ходу не дам
Dr. Friedrich
Ну на словах опиши хотя б
Doge
Набираю с телефона
Dr. Friedrich
Пример хороший, но хочется продолжения!
Romɑn
Так что с ходу не дам
ну вот! Скала амбасадор в фш чате не готов = (
Romɑn
😂
Doge
Ну на словах опиши хотя б
Могу с хаскеля пример
Dr. Friedrich
Ему говорят на словах, а он давайте на хаскеле
Dr. Friedrich
Не годится.
Dr. Friedrich
Кстати, вот пример со слайда тоже хороший
Dr. Friedrich
Это ж можно вариадики такие сделать своеобразные
Dr. Friedrich
Ну, если нормальных вариадиков так и не завезли
Romɑn
Кстати, вот пример со слайда тоже хороший
я вот не понял как и где мне его писать этот пример
Romɑn
и там Concat это тип? или ф-ция? и мне явно надо прописывать что это конкат или что?
Doge
Кстати, вот пример со слайда тоже хороший
Это замена шейплессу и его HList в этом плане. Это как раз типичный тайплевел и не особо тянет на практичность с вашей точки зрения
Dr. Friedrich
Concat<(int, string), (long)> ≡ (int, string, long)
Dr. Friedrich
Да, считай что функция на типах
Dr. Friedrich
Её можно написать где угодно, где тип ожидается
Romɑn
Да, считай что функция на типах
тогда я наверное не понимаю как работают ф-ции на типах
Dr. Friedrich
Но на этом всё, я чота не могу придумать, как это применить
Doge
Concat<(int, string), (long)> ≡ (int, string, long)
Сейчас это можно делать на шейплессе, просто с большим бойлерплейтом
Dr. Friedrich
Ну то есть как в коде-то использовать?
Romɑn
не в рантайме же
Doge
Ну то есть как в коде-то использовать?
Ну как пример, делать свои extensible record'ы
Dr. Friedrich
Вот есть конкат
Dr. Friedrich
Я могу, наверное, функцию написать и им типизировать
Dr. Friedrich
def concat[X, Y](x: X, y: Y): Concat[X, Y]
Dr. Friedrich
Но как реализовать её?