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

Неоднозначный тип с использованием параметризованных типов Haskell
У меня есть довольно простая функция, которая принимает параметризованный тип данных и возвращает тот же тип: {-# LANGUAGE ScopedTypeVariables #-} class IntegerAsType a where value :: a -> Integer newtype (Num a, IntegerAsType n) =>...
281 просмотров
schedule 28.06.2022

Я не могу заставить мой динамический тип на основе GADT работать с параметрическими типами
Поэтому, чтобы помочь мне понять некоторые из более продвинутых функций и концепций Haskell/GHC, я решил взять работающую реализацию динамически типизированных данных на основе GADT и расширить ее для охвата параметрических типов. (Прошу прощения за...
469 просмотров
schedule 03.06.2022

Как выразить сопоставление с образцом для независимых комбинаций значений данных?
data Foo = Bar1 | Bar2 Foo Foo | Bar3 Foo | Bar4 Foo Foo Foo Теперь предположим, что кто-то построил дерево Foo , и я хочу проверить, допустимы ли аргументы значения Foo. Правила для аргументов конструктора:...
151 просмотров

Странное поведение вывода типа с типом GADT (для векторов фиксированной длины)
У меня есть следующий GADT data Vec n a where T :: Vec VZero a (:.) :: (VNat n) => a -> (Vec n a) -> (Vec (VSucc n) a) для моделирования векторов фиксированной длины, используя класс class VNat n data VZero instance...
290 просмотров
schedule 05.02.2023

Почему конструкторы GADT/экзистенциальных данных нельзя использовать в ленивых шаблонах?
Сегодня я получил ошибку компилятора при попытке использовать отложенный шаблон при сопоставлении с экзистенциальным конструктором GADT: Экзистенциальный конструктор данных или конструктор данных GADT нельзя использовать внутри ленивого (~)...
755 просмотров

Кодирование меньше, чем с помощью Haskell
я надеюсь, что некоторые эксперты Haskell могут помочь кое-что прояснить. Можно ли определить Nat обычным способом (через @dorchard Singleton-типы в Haskell ) data S n = Succ n data Z = Zero class Nat n instance Nat Z instance Nat n...
1558 просмотров

Аппликативный экземпляр для (Monad m, Monoid o) => m o?
Извините за ужасное название. Я пытаюсь создать экземпляр Applicative для Monad , обертывающего тип, который является Monoid . instance (Monad m, Monoid o) => Applicative (m o) where pure x = return mempty xm <*> ym = do...
352 просмотров
schedule 10.12.2022

Как избежать реализации нескольких функций с помощью GADT?
Прежде всего, вот минимальный пример моего кода: {-# LANGUAGE GADTs #-} -- package "url" import Network.URL (exportURL, URL(..), URLType(..)) data MyURL a where GalleryURL :: URL -> MyURL URL PictureURL :: URL -> MyURL URL url =...
214 просмотров
schedule 10.10.2022

Как мне написать этот пример с зависимой типизацией в Haskell?
Предположим, я хочу представить конечные модели языка первого порядка с константой c, символом унарной функции f и предикатом P. Я могу представить носитель как список m , константу как элемент m , функцию как список упорядоченных пар элементов m...
239 просмотров
schedule 24.07.2023

Включение -fno-warn- для недоступного кода в GADT
Учитывая GADT , проиндексированный фантомной переменной, я могу использовать автономный вывод для создания некоторых простых экземпляров. data Client data Temporary data Permanent data Token ty where ClientToken :: Token Client...
101 просмотров
schedule 28.05.2022

GADT: разница между «алгебраическим» и «абстрактным»?
Кажется, что термины «Обобщенный Абстрактный тип данных» и «Обобщенный Алгебраический тип данных» используются взаимозаменяемо, но я уверен, что технически это не одно и то же. Может ли кто-нибудь объяснить разницу, возможно, на простом примере...
410 просмотров

GADT против экзистенциально квантифицированных типов (*forall*)
Можно использовать GADT для выражения экзистенциально квантифицированных типов . Я вижу, что GADT более общий — данные -type-extensions , параграф 7.4.7 Когда лучше использовать типы с количественной оценкой существования , чем GADT ?...
859 просмотров
schedule 02.07.2023

Упрощение GADT с помощью Uniplate
Я пытаюсь ответить на этот вопрос о стеке, используя uniplate , поскольку я предложил , но единственное решение, которое я придумал , довольно уродливый. Это кажется довольно распространенной проблемой, поэтому я хотел знать, есть ли более...
516 просмотров
schedule 22.09.2022

GADT для представления функционального приложения с несколькими параметрами (AST)
Я видел в руководстве по OCaml этот пример использования GADT для AST с применением функции: type _ term = | Int : int -> int term | Add : (int -> int -> int) term | App : ('b -> 'a) term * 'b term -> 'a term let rec eval :...
188 просмотров
schedule 01.07.2023

Преобразование GADT в фантомные типы
Я играл с GADT и фантомными типами в OCaml. Я понял, что GADT — это удобство для описания определенных видов фантомных типов — поправьте меня, если я ошибаюсь. Поэтому я решил попробовать преобразовать программу, использующую тип GADT, в программу с...
639 просмотров
schedule 14.03.2022

Как я должен проходить последовательности, выровненные по типу?
Прошлым летом я рассмотрел идею сворачивания последовательности с выравниванием по типу, for-type-aligned-sequences">спрашивая здесь , как можно реализовать аналог foldr с точки зрения аналога foldMap . Йоахим Брайтнер смог сделать это с помощью...
222 просмотров
schedule 07.07.2023

Гетерогенные данные.Карта в Haskell
Можно ли сделать гетерогенный Data.Map в Haskell с GADT вместо Dynamic ? Я попытался смоделировать разнородную коллекцию, как описано в этом ответе : {-# LANGUAGE GADTs #-} class Contract a where toString :: a -> String data...
356 просмотров
schedule 19.09.2023

Представление идентификатора страны и текста в типе данных Haskell
У меня есть список идентификатора страны и текста страны в json { 1 : "country one", 2 : "country two" } Я создал ниже код для представления идентификатора страны и текста в haskell data Country a = Country a country1 :: Country String...
53 просмотров
schedule 26.07.2023

Почему Haskell не может сделать вывод, что этот тип правильный?
У меня есть простое определение для Nat и определение для типов, индексируемых Nat, Natty. data Nat :: * where Zero :: Nat Suc :: Nat -> Nat data Natty :: Nat -> * where Zy :: Natty Zero Sy :: Natty n -> Natty (Suc n)...
81 просмотров
schedule 09.03.2022

Алгебраические типы данных с использованием Nat (одноэлементная библиотека)
Я пытался объявить алгебраический тип данных для работы на уровне типов, используя библиотеку singletons. Я могу сделать это без особых проблем, если не использую в конструкторах Nat , Symbol , Integer или String . Например: {-# LANGUAGE...
80 просмотров
schedule 03.04.2022