Евгений
Какую ты проблему решаешь изначально? Чувствую XY
IC
хочу нормальный маркер для вот этого всего вместо Bool
Vladimir
Множеству не обязательно вообще быть открытым или замкнутым.
Vladimir
И не обязательно быть исключительно либо открытым, либо замкнутым. Можно быть и тем, и другим.
Евгений
Потому что, опять же, никто не оперирует этими понятиями одновременно
Евгений
Замкнутое это всего ли дополнение открытого, по сути не очень полезное понятие
Ilya
Ilya
Both и т.д.
Vladimir
Пропустил код.
Ilya
Ilya
Только нафига это нужно, и правда непонятно
Ilya
Понял, тебе надо закрытость и открытость в одно слово смэшить
Ilya
Чтобы тип назвать
Ilya
Так?
кана
не помню, чтобы эту классификацию как-то называли
кана
"по открытости"
кана
или "по замкнутости"
Ilya
Да заведи просто два типа изоморфных Bool, и запихни их в тип, изоморфный паре
кана
а как его назвать?)
кана
тип, изоморфный паре
Ilya
Вот для этого и пара
Ilya
Чтоб не называть, но он так не хочет
Alexander
Ilya
f :: (Openess, Closeness) -> IO ()
Ilya
Норм читается
IC
кана
на хаскеле?
кана
^
Ilya
А по-русски можно?
A64m
ну тип для конструкторов Foo и Bar всегда можно назвать FooBar, и сэкономить время на придумывание чего-то получше
IC
data COBN
IC
всё, обошёлся изобретением темплейтов 😩
Ilya
Vladislav
в Haskell totality checker нужен для оптимизации, чтобы Refl в рантайме не конструировать
Vladislav
доказывать так ничего не возьмешься, разумеется
Vladislav
ну, в смысле, возьмешься, но всё будет с оговоркой, что никто нигде bottom не сотворил, то есть это не доказательство, а скорее sanity check кода
Aleksey
А вот когда доделают левити полиморфизм
A64m
смотря что подразумевается под доделанным
Aleksey
Unlifted types разве есть сейчас в GHC? Могу я попросить на вход функции анлифтнутый тип?
Aleksey
ну я имел в виду не Levity polymorphic data types а пменно анлифтнутые типы
Aleksey
в какой нибудь форме
A64m
массивы разве что
Aleksey
ну т.е. нет
Alexander
unboxed sum есть
A64m
объявлять такие типы как обычные хаскельные алгтд нельзя, так такое и не планируется сейчас
Alexander
unlifted типы тоже
A64m
так анбокснутые суммы они не только анлифтнутые
Alexander
ну пихнуть туда Array#
Aleksey
а еще и анбокснутые ..
A64m
анлифтнутые это когда не надо за ленивость платить
Alexander
он вроде unlifted boxed
Alexander
но это тот ещё ад
Alexander
оно вообще интересно заработает?
A64m
можно будет, наверное, в перспективе костылить их на ньютайпах, которые планируется сделать работающими для типов разных левити, но это еще не имплементировано
A64m
т.е. можно будет делать такой аналог растовых енумов, анбокс, без рекурсии и т.д. но делать их кучей бойлерплейта, т.е. анб. суммами, ньютайпами и паттерн синонимами
A64m
ну можно еще бекпаком такое делать уже сейчас, но с еще большим бойлерплейтом потому, что бекпак паттерн-синонимы не поддерживает
A64m
но бекпаком вообще можно левити полиморфный код писать, с 8.4
A64m
еще планируются типизированные массивы для анлифтед значений, а не как сейчас
A64m
вот собственно и все
A64m
планов не очень много, так что и доделывать особо нечего
Vladislav
A64m
но, веротно, новые планы могут появится, движение в этом направлении есть
Vladislav
но вот коэрсить списки и индексированные длиной списки было бы точно прикольно
Vladislav
при условии, что там equality proof каким-то образом анбокснулся и на рантайм-представлении не отразился
A64m
вроде я видел пример где дерайвинг виа делается для эквивалентных с точки зрения структуры типов (на дженериках)
A64m
это же фактически коерс
Vladislav
так соль коерса в том, что он id
Vladislav
а на генериках там по воле оптимизатора
A64m
не, речь не про преобразование на дженериках, это сто лет возможно
A64m
а для конструирования дженериками свидетельства структурной эквивалентности, которое позволяет переносить инстанс с одного на другой, что уже id
Vladislav
да ладно
Vladislav
не представляю себе как это работает
Vladislav
в пейпере по DerivingVia это есть?
A64m
я тоже Ж((