Size: a a a

2020 February 12

𝙰𝙸

𝙰𝚗𝚊𝚝𝚘𝚕𝚢 𝙸 in rust_offtopic
Emmanuel Goldstein
/me неочевидно, чем это решение более тотальное, чем loop { }.
Он возвращает !
Вот Empty - да. Empty - это !, а match a {} - это Т)
источник

EG

Emmanuel Goldstein in rust_offtopic
[citation needed]
источник

EG

Emmanuel Goldstein in rust_offtopic
#![feature(never_type)]

fn f<T>(x: !) -> T {
   x
}

Компилируется.
match Empty {} имеет тип ! и коэрсится после этого в любой тип T.
источник

λ

λоλторт in rust_offtopic
Emmanuel Goldstein
#![feature(never_type)]

fn f<T>(x: !) -> T {
   x
}

Компилируется.
match Empty {} имеет тип ! и коэрсится после этого в любой тип T.
нет
источник

EG

Emmanuel Goldstein in rust_offtopic
[citation needed]
источник

λ

λоλторт in rust_offtopic
match a {} имеет тип тела матчинга, а так как тела нет, то и тип доступен любой, какой пожелаешь
источник

λ

λоλторт in rust_offtopic
это один из фундаментальных законов как классической логики, так и интуиционистской
источник

λ

λоλторт in rust_offtopic
из лжи выводимо всё что угодно
источник

λ

λоλторт in rust_offtopic
коэрция ! в любой тип сделана лишь для удобства, чтобы не нужно было писать:
let a = loop {};
match a {}
источник

𝙰𝙸

𝙰𝚗𝚊𝚝𝚘𝚕𝚢 𝙸 in rust_offtopic
Emmanuel Goldstein
#![feature(never_type)]

fn f<T>(x: !) -> T {
   x
}

Компилируется.
match Empty {} имеет тип ! и коэрсится после этого в любой тип T.
Вообще да, !, как и Empty - это путая дизъюнкция, но, строго говоря, сама по себе она выводом не является. Чтобы сделать вывод из дизъюнкции вам нужно иметь соответствующую лемму для каждого дизъюнкта. В нашем случае дизъюнктов 0, поэтому и лемм 0. Пустой матч - цивилизованный способ это сказать.
источник

AZ

Alex Zhukovsky in rust_offtopic
𝙰𝚗𝚊𝚝𝚘𝚕𝚢 𝙸
Вообще да, !, как и Empty - это путая дизъюнкция, но, строго говоря, сама по себе она выводом не является. Чтобы сделать вывод из дизъюнкции вам нужно иметь соответствующую лемму для каждого дизъюнкта. В нашем случае дизъюнктов 0, поэтому и лемм 0. Пустой матч - цивилизованный способ это сказать.
хз, имхо это не соответствует условию "не должно быть боттомов"
источник

AZ

Alex Zhukovsky in rust_offtopic
match Empty не может быт вызыван
источник

EG

Emmanuel Goldstein in rust_offtopic
В третьей задаче боттом у нас вообще на входе.
источник

AZ

Alex Zhukovsky in rust_offtopic
по сути Empty никогда не возвращает результат
источник

AZ

Alex Zhukovsky in rust_offtopic
В общем если сформулировать "написать без циклов, рекурсии и паники" то такой вариант можно принять
источник

EG

Emmanuel Goldstein in rust_offtopic
На самом деле, у нас в каждой задаче на входе боттом, потому что функции l, r и a нельзя определить без боттомов.
источник

AZ

Alex Zhukovsky in rust_offtopic
в общем, не очень понятно, что такие задачки должны показать
источник

𝙰𝙸

𝙰𝚗𝚊𝚝𝚘𝚕𝚢 𝙸 in rust_offtopic
Emmanuel Goldstein
На самом деле, у нас в каждой задаче на входе боттом, потому что функции l, r и a нельзя определить без боттомов.
К счастью определять их не нужно, т.к. они уже даны)
источник

EG

Emmanuel Goldstein in rust_offtopic
Забавно, в первых двух задачах типы на входе автоматически имплементируют Any, что позволяет сделать некоего рода небесконечную рекурсию.
источник

EG

Emmanuel Goldstein in rust_offtopic
Это значит, что мы умеем сравнивать типы этих значений в рантайме.
источник