Вопросы по теме 'gadt'

Последствия использования GADT для производительности
Когда отвечая на вопрос с предложением использовать GADT , в комментариях возникло несколько вопросов относительно производительности. Вопрос касался класса типов PlotValue : class PlotValue a where value :: a -> Double и мой ответ...
620 просмотров
schedule 03.05.2023

Устранение subst для доказательства равенства
Я пытаюсь представить счетчики mod-n как разрез интервала [0, ..., n-1] на две части: data Counter : ℕ → Set where cut : (i j : ℕ) → Counter (suc (i + j)) Используя это, определить две важные операции несложно (некоторые доказательства...
248 просмотров
schedule 21.04.2024

Неоднозначный тип для полиморфных функциональных членов драйвера GADT
Я тестирую код для небольшого эксперимента, который я провожу, но в самом начале я натолкнулся на препятствие, которое я не знаю, как исправить. data DatabaseDriver a b where DatabaseDriver :: (Table table, Field field) => { dbInsert...
136 просмотров
schedule 02.06.2022

Труба с динамическим типом запроса/ответа?
Это кажется разумным желанием, но у меня проблемы с типом. Я хотел бы иметь Client , который может отправить список параметров Server , который выберет один и вернет выбранный элемент. Что-то вроде этого: module Toy where import Pipes asker...
210 просмотров
schedule 21.07.2023

Могу ли я принудить экзистенциально квантифицированный аргумент в конструкторе типа?
У меня есть тип данных, чей (единственный) конструктор содержит экзистенциально квантифицированную переменную типа: data LogEvent = forall a . ToJSON a => LogEvent { logTimestamp :: Date , logEventCategory...
161 просмотров
schedule 02.07.2023

ocaml GADT: зачем набирать файл. нужный?
В базовом примере GADT из §7.20 руководства по ocaml , что означает «тип а». ? Почему недостаточно объявить eval: a term -> a? type _ term = | Int : int -> int term | Add : (int -> int -> int) term | App :...
586 просмотров
schedule 27.01.2024

Вывод общего экземпляра класса типов из серии более мелких?
название этого, по общему признанию, не очень описательное, но я не знаю, как еще описать это в коротком названии. Буду признателен за любые рекомендации! Я собираюсь представить очень упрощенную версию моей проблемы :) Итак, у меня есть класс...
78 просмотров
schedule 28.02.2022

Можно ли создать экземпляр моноида для GADT?
Учитывая следующий тип данных {-# LANGUAGE GADTs #-} data Response a where ResponseMap :: HashMap Text (Sum Int) -> Response (HashMap Text (Sum Int)) ResponseSum :: Sum Int -> Response (Sum Int) как бы я получил экземпляр моноида...
131 просмотров
schedule 04.01.2024

Функция GADT полиморфного типа результата
В следующем коде, что я могу заменить x = ... . Обратите внимание, что я не хочу накладывать ограничение класса на a (конечно, a уже относится к типу Bool , поэтому может принимать только один из двух типов). {-# LANGUAGE GADTs #-} {-#...
150 просмотров
schedule 05.10.2023

Как реализовать типы сумм в динамически типизированных языках без сопоставления с образцом
У меня есть только теоретическое представление о типах сумм Haskell. И все же я чувствую, что они действительно важны в Haskell и коренным образом меняют способ моделирования ваших данных. Поскольку я считаю, что они могут быть полезны и в языках с...
901 просмотров

Ошибки полиморфной рекурсии OCaml
Учитывая следующие виды: type _ task = | Success : 'a -> 'a task | Fail : 'a -> 'a task | Binding : (('a task -> unit) -> unit) -> 'a task | AndThen : ('a -> 'b task) * 'a task -> 'b task | OnError : ('a -> 'b task) * 'a...
146 просмотров
schedule 01.08.2023

Как удалить сахар из GADT?
Я читал Принуждение и роли для чайников , и автор мимоходом упомянул, что GADT — это просто синтаксический сахар. GADT — это синтаксический сахар поверх (~) , поэтому ожидайте, что GADT будут иметь номинальные параметры типа роли. Далее...
137 просмотров
schedule 14.11.2023

различия: GADT, семейство данных, семейство данных, которое является GADT
В чем / почему разница между этими тремя? Является ли GADT (и обычные типы данных) сокращением семейства данных? В чем конкретно разница между: data GADT a where MkGADT :: Int -> GADT Int data family FGADT a data instance FGADT a where...
864 просмотров
schedule 11.01.2023

Использование вариантов GADT в полиморфном составном типе, как в обычных алгебраических вариантах?
Скажем, у меня есть этот простой вариант типа: type flag = { name: string; payload: string option; } type word = | Arg of string | Flag of flag let args = [| Arg "hello"; Flag {name = "foo"; payload = Some "world"}; |] Однако если...
159 просмотров

Косвенно ссылайтесь на определенные И неспецифические объекты в Haskell без монад
Я хочу хранить кучу элементов разных «видов» в структуре данных контейнера (список, набор,..) и косвенно ссылаться на них откуда-то еще. Обычно вы, вероятно, использовали бы тип суммы для элементов и, возможно, список в качестве контейнера или что-то...
59 просмотров
schedule 31.03.2024

Сопоставление шаблона в семействе данных в Haskell
Я упаковал все семейство данных в один экзистенциал: data Type = Numeric | Boolean data family Operator (t :: Type) data instance Operator 'Numeric = Add | Sub data instance Operator 'Boolean = And | Or data AnyOp where AnyOp :: Operator t...
183 просмотров

Развертывание экзистенциально квантифицированного GADT
У меня есть пользовательский тип значения Value , помеченный своим типом ValType : data ValType = Text | Bool data Value (tag :: ValType) where T :: Text -> Value 'Text B :: Bool -> Value 'Bool и я хотел бы определить функцию,...
138 просмотров