Влод
Нельзя тип назвать значением
Влод
Нужно договориться
Ilya
Хорошо, как тогда тип может населять другой тип? В haskell
Влод
В пределах нас 6ти человек
Ilya
Bottom населяет Int
Влод
незначение населяющее типы
Влод
ну то что пустое множество является подмножеством любого множества же никого не напрягает?
Ilya
Да меня уже ничего не напрягает:)
Ilya
Хорошо, пусть будет не-значение
Alexander
ну bottom это не значеие
Alexander
это результат for some definition of результат вычисления
Влод
А где-то можно...
Если тип включает в себя значение он всё ещё тип. Или я не так понял?
Anonymous
Если тип включает в себя значение он всё ещё тип. Или я не так понял?
В dependent types языках типы и значения не различаются.
Ilya
Просто насколько я себе представляю, в ванильной теории типов никаких тайпклассов нет. Есть только типы, подтипы и надтипы. Но в хс решили, что удобнее сказать, что ТИП у значения может быть только один (пока забыли про боттом), а для объединения значения разных типов будем юзать тайпклассы
Ilya
Ну академическая
Mansur
какая из?
Mansur
их много: https://en.wikipedia.org/wiki/Type_theory#Systems_of_type_theory
Ilya
Ну вот откуда эти все top и bottom
Нурлан
надо все-таки смириться, что haskell вдохновлялся теорий категорий
Mansur
Ну вот откуда эти все top и bottom
т.е. в простом типизированном лямбда-исчислении с подтипами с добавлением Top и Bottom?
Mansur
вроде это самая простая с Top и Bottom ;)
Ilya
вроде это самая простая с Top и Bottom ;)
Послушаю умного человека:) значит она
Ilya
А в какой-нибудь теории типов есть тайпклассы?
Влод
Кажется здесь была ирония
Влод
Пускай пока что будут типы и порядок между ними
Влод
И вот у этих типов будет верх или низ?
Anonymous
И вот у этих типов будет верх или низ?
Зависит от того как определишь порядок
Mansur
А в какой-нибудь теории типов есть тайпклассы?
ввести соответствующие правила и они появятся. Проблема в том, чтобы потом показать, что они ничего не ломают в теории
Влод
Ну по крайней мере тип которому все остальные являются подтипом
Mansur
полагаю, можно посмотреть статьи какого-нибудь Wadler-а про это :)
Влод
Ладно
Ilya
Типа ребята закругляемся. Тут теоркат
Влод
Ладно этот всё таки похоже больше из области значений чем из области типов
Влод
Несмотря на то что англоязычная цитата ли Александра говорила строго об обратном
Ilya
А мне всё же не даёт покоя, что (head []) и (length $ repeat 1) считаются чем-то одинаковым!!!
Ilya
Недавно мне показалось, что я это понял, но всё же нет:(
Mansur
Ладно этот всё таки похоже больше из области значений чем из области типов
есть отношение "a имеет тип A" (± нюансы) и есть отношение "тип A является подтипом типа B", это два разных отношения
Влод
Я рад
Влод
Но давай вставь сюда ботом
Ilya
Несмотря на то что англоязычная цитата ли Александра говорила строго об обратном
В теории типов bottom это пустой подтип любого типа, но в hs я видел запись в учебнике data Int = undefined | Int#, и пусть меня первым бросит камень тот, кто назовет это чудо-юдо слева от "|" типом
Влод
Ну например любой тип является подтипом ботом
Влод
Ок?
Mansur
есть следующее правило типизации: для любого типа T тип Bottom является подтипом T (Bottom :< T)
Ilya
Вот. Херня!
Ilya
А не тип
Mansur
Вот. Херня!
В haskell, а не в теории типов
Ilya
Да
Ilya
С теорией типов у меня мир 😀
Alexander
/o
Ilya
В теории типов bottom это пустой подтип любого типа, но в hs я видел запись в учебнике data Int = undefined | Int#, и пусть меня первым бросит камень тот, кто назовет это чудо-юдо слева от "|" типом
О, вот что придумал. В теории типов не делают различия между вычислением, которое моментально возвращает "ошибку" (head []) и вычислением, которое выполняется бесконечно долго (length $ repeat 1), потому что в теории типов нет времени 🤗 Просто либо что-то возвращает, либо нет. Всё, кажется утряслось.
Alexander
эм.. а разве эт неочевидно?
Ilya
Как только дошло
Misha
+SafeCopy
в продолжение и дабы разбавить ужасы bottoma: а это сделано поверх distributed-process c какой-то кастомной сериализацией или вы определяете data Message = Message ByteString?
Alexander
сорри я не думал, что это дополнять надо
Misha
или на более низком уровне?
Alexander
на уровне distributed process
Misha
то есть там можно плагинить свою сериализацию?
Alexander
ну у нас есть data Message = Message StablePrint ByteString
Misha
а оверхед на копирование?
Misha
ну типа один массив байтов в другой
Misha
или это ерунда
Alexander
там writev подиее не должно быь большой проблемой при больших размерах
Misha
опа
Misha
то есть сериализатор использует writev?
Misha
в смысле сериализует сразу в сокет?
Misha
или я туплю
Misha
а, ясно
Alexander
оно в lazybytestring сериализует который куски байтострок