Alexander
нету значения которое = bottom
Ilya
Ну хорошо, не значение
Alexander
bottom (отсуствие значения) населяет все lifted типы
Ilya
Так как нет конструктора
Alexander
или т.к. не завершается
Ilya
void из моего примера разве не имеет конкретный тип?
Alexander
data S = S (forall a. a) внутри S тоже bottom 😏
Alexander
эм.. я сказал отсутсвие значения, тут вопрос "разве не имеет конкретный тип"
Alexander
а стоп, в цитатах запутался
Alexander
в любом lifted типе есть _|_
Alexander
т.е. может быть отсуствие значения
Ilya
С этим не спорю
Ilya
Хорошо, то есть если функция невычислима, то мы просто говорим, что она возвращает bottom этого типа?
Ilya
Любая функция
Ilya
Вроде понял
Ilya
Просто мне что интересно
Ilya
Можно определить два bottom разного типа, но при этом мы всё равно считаем их одинаковыми
Влод
bottom не может быть значением
Влод
bottom (отсуствие значения) населяет все lifted типы
Влод
незначение населяющее типы
Влод
ну в цитате выше боттом точно назван типом. тип без конструктора пускай будет боттом. а если есть невычислимое выражение, тип которого известен, то это уже не боттом?
Alexander
ну то что пустое множество является подмножеством любого множества же никого не напрягает?
Ilya
Никого
Ilya
Немного напрягает, что могут быть равны элементы двух разных типов
Ilya
Если это элемент - боттом
Ilya
Но я уже начал привыкать
Alexander
обчный intiial object =)
Нурлан
В теории множеств пустое множество не имеет типа, поэтому оно является подмножеством любого множества.
Нурлан
Получается формально bottom не имеет типа
Artem
Получается формально bottom не имеет типа
формально bottom имеет полифорфный тип (forall a. a)
Alexander
те которые содержат bottom 😏
Alexander
а нет
Alexander
стоп
Ilya
А не lifted это Int#
Alexander
да
Alexander
я чуть с boxed не попутал
Alexander
unlifted это #
Alexander
есть unlifted boxed, нпример ByteArray#
Нурлан
bottom (отсуствие значения) населяет все lifted типы
а разве не liffed типы bottom не населяет?
Alexander
не населяет
Alexander
let loop# = loop# in loop# не сделать вроде как
Нурлан
В теории множеств есть типы?
там есть принадлежность
Влод
там есть принадлежность
Переформулируй изначальное предложение со словом принадлежность вместо слова тип
Влод
обчный intiial object =)
Что это значит
Нурлан
Переформулируй изначальное предложение со словом принадлежность вместо слова тип
Все haskell'ные типы задаются как алгебраические множества
Artem
Что это значит
пустое множество является инициальным объектом в категории множеств, то есто это понятие из теории категорий, которую можно использовать, чтобы понимать типы
Ilya
Получается формально bottom не имеет типа
Мне нравится думать о типах в Haskell как о метках на значениях. Вот изначально у нас есть просто значения, куча разных значений. А потом мы говорим, давайте теперь любое значение всегда будет содержать одну метку на себе, и только одну. Тогда типизированные (мономорфные) функции соглашаются принимать значения только с определенными метками на них, и возвращают значения других конкретных меток. Так идет вывод типов. Полиморфные функции - это как бы объединение "под одной крышей" бесконечного числа мономорфных функций, каждая из которых опять же принимает и выдает только конкретные метки. Но потом мы берем и добавляем еще одно специальное значение bottom, и говорим, что оно содержит не одну метку, а сразу все, все возможные. Соответственно, любая функция теперь может это значение вернуть. Это всё лично моё понимание, на корректность не претендую.
Нурлан
вроде тут говорили, что bottom не является элементом, а подмножество
Влод
Хорошо. Значит над хаскельными типами определено некоторое отношение мол мэйби подтип монады, монада подтип апликатив и у всех наверху этого отношения будет стоять боттом (ну или скорее внизу :))
Влод
У боттома нет значений так что вроде звучит красиво
Ilya
А наверху стоит топ
Ilya
Внезапно
Нурлан
верха не существует же
Ilya
The top type in the type theory of mathematics, logic, and computer science, commonly abbreviated as top or by the down tack symbol (⊤), is the universal type, 
Ilya
верха не существует же
Только в хаскелле
Alexander
Proxy ?
Ilya
Какой там
Alexander
а он просто terminal, terminal соотвествует Top или нет?
Ilya
Int ведь не имеет тип Proxy
Ilya
Типа любое значение является значением типа top
igo
трудно понимать, когда используют просторечие "типа" в темах про типы =_=
Ilya
Извиняюсь
Ilya
Мне кажется, что топ в хаскелл - это forall
Ilya
Что если бы мы писали функцию id как id :: Forall a => a -> a Где Forall - это универсальный тайпкласс, для которого автоматически делается инстанс для каждого типа, и этот тайпкласс не содержит ни одного метода
Ilya
Вроде норм
Ilya
Всем
Влод
Ты можешь андефайнед передать в любую функцию и вернуть из любой функции
Ilya
Боттом - это одно значение всех типов на свете Топ - это один тип всех значений на свете
Ilya
Двойственность такая
Влод
Ботом тип
Ilya
В haskell это проще понимать как особое значение
Ilya
Потому что нет подтипов и надтипов