доня.
Anonymous
а причем тут импл?
доня.
доня.
чем тип функций отличается от типа числового?
доня.
Alex
Alex
завтра будем impl для констант?
Alex
после завтра для макросов?
доня.
аааа, я понял
Alex
типа макрос с такими аргументами ловит impl
доня.
ты просто не шаришь что сейчас везде функции — обычные значения
доня.
теперь я понял твою проблему
Alex
доня.
Alex
я вроде второе издание полностью прочел
доня.
в какой-нибудь главе о closures должно быть, иначе эту главу нельзя понять
Berkus
а вы тут просите hkf лел
Anonymous
хм
Anonymous
а можно таким образом написать трейт который определяет, predicate ли функция?
доня.
Alex
> first-edition
доня.
Alex
но во втором поинтеры на функции тоже были
Alex
на что надо обратить внимание?
Alex
бля
Alex
= function_name
Alex
это как воще
Alex
а, понял
доня.
которое можно присваивать там
Alex
а на let тоже можно impl сделать?
Anonymous
доня.
impl можно навесить на любой ТИП
Alex
let stuff
impl trait for stuff
Anonymous
а можно impl на impl сделать?
доня.
Anonymous
лололо
Alex
доня.
Alex
то у тебя функция это значение
Alex
то на значение внезапно нельзя impl
доня.
Alex
да я не пойму тебя
доня.
функция — значенин
доня.
а её тип — ЭТО ВНЕЗАПНО ТИП
доня.
ОХУЕТЬ, ПРАВДА?
Alex
ну я не знал что у функции есть тип, лол
Danila Matveev
да я не пойму тебя
конкретный объект и тип объекта это непересекаемые пространства
Alex
для меня Trait это тип
Alex
а стоп
Alex
структура это тип
Alex
короч я запутался.
Danila Matveev
и структура и трейт находятся в "пространстве" типов
Alex
но почему у функции вдруг есть тип?
доня.
Alex
ты сказал что на значение нельзя impl
Danila Matveev
а почему нет?
есть тип вида Int => String
и экземпляр этого типа какаято функция
доня.
если ты берешь поинтер на функцию, у него же должен быть какой-то тип
Мерль
Alex
а, ну да, вспомнил. Т.к мы можем кложурку получить, то там все эти Fn, FnMut и т.д
Alex
которые соответственно типы.
Danila Matveev
возможно тебе поможет почитать про изоморфизм карри-ховарда
доня.
Соответствие Карри-Говарда / Изоморфизм Карри-Ховарда - эквивалентность между математическим доказательством и программой. Тип терма является высказыванием, а сам терм - доказательством верности высказывания (конструктивное доказательство, когда для доказательства утвреждения нужно доказать существование объекта доказательства).
Тип - логическое высказывание. Логическое высказывание считается верным, если его тип населен, т.е. есть хотя бы одно значение, имеющее данный тип. Например, тип Void - 0 - значений не имеет, поэтому Void эквивалентен ложному высказыванию.
Импликации A ⇒ B (если A, то B ) соотвеетствует функция a → b. И действительно, если a населен и b населен, то и тип a → b населен (есть хотя бы одна такая функция), значит и утверждение верно. И наоборот - для типа a → Void нельзя привести термы, так как не существует функции, которая вернет ничего.
Конъюнкции A ∧ B (и A, и B ) соответствует произведение типов a × b, она же пара (a, a) (или любой другой конструтор). Если хотя бы один из типов не населен, то и составить пару невозможно, ведь для одного из компонента пары просто нет возможных значений (да и логично, что a × 0 = 0 ).
Дизъюнкции A ∨ B ( A или B ) - размеченная сумма типов a + b, например Either a b. Если хотя бы один тип населен (например a`), то всегда можно составить терм `Left x, где x : a. И только если оба типа не населены, то и сумма не населена.
А теперь вещи поинтереснее - кванторы всеобщности и существования.
Квантор всеобщности, ∀(x ∈ A) P(x), утверждает, что для каждого x из A верно утверждение (предикат) P(x). Например ∀(x ∈ ℕ). x² ≥ 0 - для каждого натурально числа x верно то, что x² больше либо равен нулю. Нам как бы нужно выполнить конънкцию всех утверждений P(x) для каждого x. А конъюнкция - произведение типов ⇒ нам нужно найти произведение всех зависимых от x типов P(x) для каждого значения x типа a. А это Π-тип (пи-тип). То есть каждая функия (a :: A) → P a является квантором всеобщности, ведь этот пи-тип населен только тогда, когда населены все P(a) для каждого a.
Аналогично и с квантором существования ∃(x ∈ A) P(x), который утверждает, что утверждение P(x) верно хотя бы для одного x. Его изоморфизмом является Σ-тип (сигма-тип), так как именно сигма-тип является суммой всех P(x) для каждого x, на Idris тип квантора всеобщности будет выглядеть так - (x : A ** P x).
Отрицанию ¬A соответствует тип a → Void, тут все понятно.
Один важный момент, тип Void → Void населен ( 0^0 = 1 ), это частный случай id. Функцию вызвать конечно нельзя, но тем не менее, функция существует и возвращает элемент типа Void для каждого входного элемента типа Void (коих 0). Если вы помните, как я представлял функцию как таблицу значений, то тут у нас получится пустая таблица - ().
Все эти изоморфизмы между логикой и типами позволяеют нам строить утверждения на типах и доказывать их. Именно этим я буду сейчас заниматься, потому и прикупил книжку по Idris)
доня.
вот про изоморфизм Карри-Ховарда
Danila Matveev
ну такое, не для людей далеких от компьютер сайенс и не совсем точно с другой стороны
Danila Matveev
хотя не, точно с точностью до изоморфизма))
Anonymous
https://play.rust-lang.org/?gist=1e50a802ac74b1511981da800dc256e0&version=nightly
Anonymous
интересная ошибка...
Anonymous
никто не знает можно ли заставить это работать?
Berkus
пытаюсь собрать redox-os, посмотрим чем кончится
Anonymous
есть же образы