нет
дефайн монады сначала
Потому что нет HKT. А HKT нет, потому что без GC HKT — жуткий изврат и мучения.
неочевидно, что мешает сделать HKT без GC. HKT вообще существуют только на уровне типов, где никакого управления памятью ещё не существует
На уровне типов у нас просто-типизированное ЛИ, в котором управление памятью — это "memory leaks are memory safe". 😊 В принципе, конечно, пофиг что тайпчекер протекает, но на уровне значений это тоже сказывается.
А где-то есть непротекающий тайпчекер? И как это вообще выразить на уровне типов? Хотя... Линейные типы, наверно
Так прикручиваем GC — и не протекаем! 😃
Выразить на уровне типов — это только если субструктурные типы есть, по-другому-то никак. 🤷♀️
Как рантайм связан с тайплевлом?
Через теорему о soundness. 😃
Добавляем вариантность и проблема решена
Я не понял, о чём Вы. Ну и объяснять в чём проблемы в чате я тоже не возьмусь. 😊
Я всё жду когда transpose() напишут для всех возможных монад) Пока что есть только для резалтов, опшнов и футур (точнее некоторых их комбинаций)
Так для всех возможных нельзя — монады в общем случае не коммутируют. В этом и засада. Но это плата за выразительную мощь.
я говорю для всех возможных, а не для всевозможных. Русский язык сложна))
а по факту для чего тебе еще нужно?
для Result<MyCustomMonad> например
твоя монада ты и реализуй, давай конкретные типчики
в смысле? Тут верхний тип Result, это у него должн быть нужный транспоз
что такое протекающий тайпчекер можно объяснить?
Где утекает память в записи Self<A> -> Self<B>?
В тайпчекере. В записи памяти вообще нет.
это обязательное свойство раста или только текущей реализации? Не понял к чему претензия в итоге
Это к Расту вообще не относится.
Тогда я не понял что куда течет. Я вот запускаю tsc/rustc/csc и у меня ничего не течет. чяднт?
Ничего не будет, просто добавим порядок инстанцирования Self (SelfN<T1, ..., TN>) и запретим дефолты.
Обсуждают сегодня