Size: a a a

2021 February 01

EG

Emmanuel Goldstein in rust_offtopic
Простой пример на идрисе из книги:
my_type : Bool -> Type
my_type True = Int
my_type False = String

my_func : (x : Bool) -> (my_type x)
my_func True = 42
my_func False = "forty two"

Круто! Но, я тут подумал — я хочу матчить не по булу, а по инту. У инта тоже фиксированный набор значений, почему бы этому не сработать?
my_type : Int -> Type
my_type 0 = Int
my_type _ = String

my_func : (x : Int) -> (my_type x)
my_func 0 = 42
my_func _ = "forty two"

Упс.
источник

EG

Emmanuel Goldstein in rust_offtopic
В моём варианте это продолжает работать точно так же, как и работало.
В варианте идриса — ломается при элементарной модификации.
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Простой пример на идрисе из книги:
my_type : Bool -> Type
my_type True = Int
my_type False = String

my_func : (x : Bool) -> (my_type x)
my_func True = 42
my_func False = "forty two"

Круто! Но, я тут подумал — я хочу матчить не по булу, а по инту. У инта тоже фиксированный набор значений, почему бы этому не сработать?
my_type : Int -> Type
my_type 0 = Int
my_type _ = String

my_func : (x : Int) -> (my_type x)
my_func 0 = 42
my_func _ = "forty two"

Упс.
Не понял
источник

OA

Oleg Andreev in rust_offtopic
Αλεχ Zhukovsky
Ты делаешь простые вещи сложными)
If arbitrary values are allowed in dependent types, then deciding type equality may involve deciding whether two arbitrary programs produce the same result; hence type checking may become undecidable.type checking may become undecidable. (https://en.wikipedia.org/wiki/Dependent_type)

Т.е. стремление к все более мощной системе типов ведет к бесконечному усложнению всего?
источник

EG

Emmanuel Goldstein in rust_offtopic
polunin.ai
Не понял
Первый пример компилируется, второй — нет
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
Первый пример компилируется, второй — нет
Чё пишет
источник

EG

Emmanuel Goldstein in rust_offtopic
polunin.ai
Чё пишет
Не может упростить my_func 0 до Int и оставляет его как my_func 0
источник

p

polunin.ai in rust_offtopic
Поменяй инт на нат
источник

EG

Emmanuel Goldstein in rust_offtopic
polunin.ai
Поменяй инт на нат
С Nat и я могу.
источник

EG

Emmanuel Goldstein in rust_offtopic
Суть в том, что в идрисе — нравственно-неполноценные тайплевел-функции, которые умеют в сильно ограниченный сабсет самого идриса.
источник

EG

Emmanuel Goldstein in rust_offtopic
Причём ограниченный даже не только тотальностью — my_type тривиально тотальная в моём примере
источник

EG

Emmanuel Goldstein in rust_offtopic
Doge Shibu
Там функции Type -> Type - это в норме вещей
Так что вот это утверждение — правда с ограниченной точки зрения
Да, в идрисе есть тайплевел функции, но они написаны на урезанном сабсете урезанного сабсета идриса, и не моугт довольно тривиальные вещи (я легко могу представить, что я захочу матчить, скажем, по константным строкам на тайплевеле)
источник

EG

Emmanuel Goldstein in rust_offtopic
Идрис не вызывает my_type, а пытается упростить, насколько я понимаю внутренности этого процесса. Причём пытается не очень тщательно.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Oleg Andreev
If arbitrary values are allowed in dependent types, then deciding type equality may involve deciding whether two arbitrary programs produce the same result; hence type checking may become undecidable.type checking may become undecidable. (https://en.wikipedia.org/wiki/Dependent_type)

Т.е. стремление к все более мощной системе типов ведет к бесконечному усложнению всего?
Так сделай ограничение на тотальность и все. Ты тоже заинтересован чтобы компиляция завершилась за конечное время
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
red75prime
citation needed
Мнение
источник

EG

Emmanuel Goldstein in rust_offtopic
Αλεχ Zhukovsky
Так сделай ограничение на тотальность и все. Ты тоже заинтересован чтобы компиляция завершилась за конечное время
Нет, мне пофиг на самом деле. Простой recursion limit справится с тем, чтобы компиляция завершилась за конечное время, и отлично справляется с этим в куче существующих языков. Те же плюсы, вон, вообще нельзя распарсить за конечное время, и чо?
источник

p

polunin.ai in rust_offtopic
Emmanuel Goldstein
С Nat и я могу.
Без Ната нету тайплевела в идрисе 🤷‍♀
источник

p

polunin.ai in rust_offtopic
У меня помню были идеи как выражать числа из базовых конструкций языка. Но потом мне стало впадлу, и я бросил.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Emmanuel Goldstein
Нет, мне пофиг на самом деле. Простой recursion limit справится с тем, чтобы компиляция завершилась за конечное время, и отлично справляется с этим в куче существующих языков. Те же плюсы, вон, вообще нельзя распарсить за конечное время, и чо?
Я не тебе отвечал)
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Emmanuel Goldstein
Простой пример на идрисе из книги:
my_type : Bool -> Type
my_type True = Int
my_type False = String

my_func : (x : Bool) -> (my_type x)
my_func True = 42
my_func False = "forty two"

Круто! Но, я тут подумал — я хочу матчить не по булу, а по инту. У инта тоже фиксированный набор значений, почему бы этому не сработать?
my_type : Int -> Type
my_type 0 = Int
my_type _ = String

my_func : (x : Int) -> (my_type x)
my_func 0 = 42
my_func _ = "forty two"

Упс.
Не вижу почему оно не должно компилиться
источник