Вопросы по теме 'type-families'

Можно ли написать fmap для этого типа данных, включающего семейство типов?
Учитывая следующее семейство типов (предполагается, что оно отражает изоморфизм A × 1 ≅ A) type family P (x :: *) (a :: *) :: * where P x () = x P x a = (x, a) и тип данных, определенный в их терминах data T a = T Integer (P (T a)...
203 просмотров
schedule 21.11.2021

Могу ли я обобщить GADT, в которых используются теги типов?
Я написал альфа-бета-поиск в Haskell, который использует семейство типов NextMoveTag , чтобы гарантировать, что состояние игры и ходы, сгенерированные из этого состояния игры, действительны для игрока, чей ход: {-# LANGUAGE GADTs, EmptyDataDecls,...
88 просмотров
schedule 26.09.2021

Экземпляр семейства данных незаконно привязан к встроенному синтаксису: ()
Я пытаюсь определить семейство типов данных , один из параметров которого приводит к типу пустой кортеж () , но он не компилируется. Вот минимальный рабочий пример: {-# LANGUAGE TypeFamilies #-} data family F a data instance F Int = ()...
331 просмотров
schedule 20.10.2021

Проверка экземпляра класса типа не может обнаружить кусочные экземпляры
У меня есть семейство типов данных, проиндексированных целыми числами уровня типа, и я определяю их как экземпляры некоторого класса типов «кусочно», что вызывает проблемы при попытке получить экземпляры другого класса. Для иллюстрации я выделил...
45 просмотров

Экземпляр семейства типов Haskell с ограничениями типа
Я пытаюсь представить выражения с помощью семейств типов, но, похоже, не могу понять, как написать ограничения, которые мне нужны, и я начинаю чувствовать, что это просто невозможно. Вот мой код: class Evaluable c where type Return c :: *...
886 просмотров

Связанное семейство типов не работает, работает в автономном режиме
Когда у меня есть такой код: class C where type T t1 t2 ... instance C (X t) where type T (X t) (t a b) = a ... Получаю ошибку (с головой GHC): • Polymorphic type indexes of associated type ‘T’ (i.e. ones independent of the...
44 просмотров
schedule 25.11.2021

Тип автоматического преобразования в haskell
Я написал несколько полезных функций для выполнения логических операций. Похоже на (a and b or c) `belongs` x . Благодаря Num , IsList и OverloadedLists я могу использовать его для целых чисел и списков. λ> (1 && 2 || 3)...
974 просмотров
schedule 07.10.2021

Почему GHC противоречит сам себе при использовании ограничения Coercible?
Почему GHC делает вывод об унификации из принуждения связанных данных и почему он противоречит своей собственной сигнатуре проверенного типа, чтобы сделать это? Эта проблема {-# LANGUAGE ExplicitForAll #-} {-# LANGUAGE FlexibleContexts #-} {-#...
89 просмотров
schedule 19.02.2022

Частичное создание экземпляров классов типов Haskell
В качестве эксперимента я пытаюсь определить очень общую логику карточных игр на Haskell. Чтобы гарантировать максимальный уровень абстракции, я определяю следующий класс типов: class (Monad m) => CardGame m where data Deck m :: *...
71 просмотров
schedule 24.02.2022

Семейства типов с GHC.Generics или Data.Data
Это вопрос, связанный с моим модулем здесь и немного упрощен. Это также связано с этим предыдущим вопросом, в котором я упростил свою проблему и не получил ответа, который искал. Я надеюсь, что это не слишком конкретно, и, пожалуйста, измените...
732 просмотров
schedule 07.03.2022

Почему этот код Haskell проверяет типы с помощью fundeps, но выдает неприкасаемую ошибку с семействами типов?
Учитывая некоторые определения типов: data A data B (f :: * -> *) data X (k :: *) … И этот класс типов: class C k a | k -> a … Эти (очень надуманные для целей минимального примера) определения функций typecheck: f :: forall...
436 просмотров

Требовать более высокого типа в экземплярах класса
У меня есть тип, который выглядит примерно так. data State = Unsanitized | Sanitized type family BarTy (s :: State) :: Type where BarTy 'Unsanitized = String BarTy 'Sanitized = Int data Foo (a :: State) = Foo (Bar a) data Bar (a :: State) =...
49 просмотров
schedule 16.06.2022

Как реализовать связанное по умолчанию семейство типов для экземпляра OVERLAPPABLE, мономорфного контейнера и оболочки нового типа?
У меня был следующий код Haskell: type family Element t class ToList t where toList :: t -> [Element t] Ранее мне предлагалось сделать Element связанным семейством типов: Foldable IntSet Я попытался реализовать этот подход. Но...
373 просмотров
schedule 17.06.2022

Haskell: определение типа при использовании функциональных зависимостей с семействами типов и GADT
Мне пришлось использовать множество расширений, чтобы создать безопасное представление встроенного языка в Haskell. В какой-то момент, когда я ввел взаимную функциональную зависимость, вывод типа остановился, чтобы выяснить правильные замены для...
247 просмотров

Последовательность над разнородным списком в Haskell
Рассмотрим следующее определение HList : infixr 5 :> data HList (types :: [*]) where HNil :: HList '[] (:>) :: a -> HList l -> HList (a:l) И семейство типов Map для сопоставления списков уровней типов: type family Map...
212 просмотров

Могу ли я отфильтровать список уровней типов на основе доступности определенного класса?
Я могу отделить функции от нулевых значений с помощью такого семейства типов: type family Funs (ts :: [*]) :: [*] where Funs '[ ] = '[ ] Funs ((a -> b): ts) = (a -> b): Funs ts Funs (k: ts) = Funs ts Я хотел бы разделить...
113 просмотров
schedule 15.07.2022

Перегрузка метода show для типов Maybe
Это продолжение моего предыдущего вопроса . Теперь я пытаюсь изменить метод toText , чтобы он также обрабатывал Maybe a с перегруженной функцией toText . Ниже приведен код, который компилируется и работает нормально — теперь я хотел бы...
90 просмотров
schedule 28.07.2022

Преобразование экземпляров семейства типов в Int
У меня есть этот код: type family Id obj :: * type instance Id Box = Int И я хочу сделать так, чтобы я всегда мог получить Int из семейства типов Id. Я понимаю, что потребуется преобразование. Я подумал, может быть, создание класса...
222 просмотров
schedule 18.08.2022

Проверка на уровне типа
Скажем, я хотел бы создавать подтипы, удовлетворяющие определенным инвариантам, без помощи внешних инструментов, таких как LiquidHaskell (в идеале я хочу сделать это даже без классов типов). Каков самый элегантный способ сделать это? До сих пор я...
133 просмотров
schedule 18.08.2022

Ограничения в экземплярах семейств типов
Я изучаю семейства типов в Haskell, пытаясь определить сложность функций уровня типов, которые я могу определить. Я хочу определить закрытую версию mod на уровне типа, например: {-# LANGUAGE TypeFamilies, DataKinds, TypeOperators,...
456 просмотров
schedule 23.08.2022