169 похожих чатов

Я кстати до сих пор не очень понимаю почему оно

работает. В задании было сказано напишите вот такой вот список, ну я и написал, а понимания почему это возможно так и не появилось.
В том примере, насколько я понимаю, у конструктора данных :> типы (a -> b) и FList b c являются экзистенционалными, то есть при паттерн матчинге по конструктору :> списка, мы теряем тип функции и тип оставшегося списка.
Но как тогда работает функция apply? Почему у нас все еще есть возможность применить функцию у которой мы потеряли тип к аргументу?

3 ответов

12 просмотров

экзистенциональный у нас "c" мы его не теряем, при патмаче у нас есть как раз "c" то есть у нас есть абстрактный неизвестный тип "c" и две значения которые этот тип используют: a -> c и FList c b

applyFList :: FList a b -> a -> b applyFList (f :> list) x = applyFList list (f x) рассмотрим типы термов в этом кейсе ----------- f :: a -> c list :: Flist c b x :: a f x :: c applyFList list (f x) :: b applyFList как видно принимает FList a b и a, возвращает b в нашем случае при передаче list мы говорим что "a = c, b = b" если проставить type-applications, то будет явнее applyFList :: forall a b. FList a b -> a -> b applyFList ((f :: a -> c) :> (list :: FList c b)) (x :: a) = let y :: c = f x in applyFList @c @b list y экзист-тип не теряет тип "c" полностью, он сохраняет связь двух аргументов :> (то есть первый аргумент - функция, которая возвращает значение такого же типа, как первый параметр FList второго аргумента :>)

Иван- Автор вопроса
кана
applyFList :: FList a b -> a -> b applyFList (f :>...

Все равно не понимаю как он тип c вычисляет до конкретного. Просто a и b это конкретные типы, но путь от а до b может быть построен через огромное кол-во абстрактных промежуточных типов (как в твоем примере тип c) и это как то не укладывается в голове

Похожие вопросы

Обсуждают сегодня

У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
всем привет. реально ли понять чем в процессе занята память? delphi/linux, процесс свой
Handatros
12
что за асемблер кста?
Shvabrikk Nya
19
Добрый день! Пробую отловить исключение EConvertError: function _TryTextToDouble(var DoubleVar: Extended; Text: String): Boolean; begin try DoubleVar := StrToFloat...
Kirill Filippenok
19
А где @Grinyaha уважаемый пропал?
Am Ambrion
14
This automated cryptocurrency trading system uses intelligent algorithms to buy low and sell high on leading crypto exchanges. Many users have already enjoyed significant prof...
Endu Wako
1
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Сделал краткий обзор магазина из статьи и заодно там же записал инструкцию по развёртыванию. https://www.youtube.com/watch?v=8-sE1vNk95Q (чё думаете по звуку? кое-что поменял...
Andrey K
17
Привет, коллеги! Возникла задача ограничить максимальный размер вложений для определённых расширений, например, чтобы для изображений лимит был 10 МБ, а для видео — 100 МБ. Ог...
Andro
1
Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Карта сайта