Вопросы по теме '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 просмотров
schedule
08.10.2021
Экземпляр семейства типов Haskell с ограничениями типа
Я пытаюсь представить выражения с помощью семейств типов, но, похоже, не могу понять, как написать ограничения, которые мне нужны, и я начинаю чувствовать, что это просто невозможно. Вот мой код:
class Evaluable c where
type Return c :: *...
886 просмотров
schedule
25.09.2021
Связанное семейство типов не работает, работает в автономном режиме
Когда у меня есть такой код:
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 просмотров
schedule
07.06.2022
Требовать более высокого типа в экземплярах класса
У меня есть тип, который выглядит примерно так.
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 просмотров
schedule
25.06.2022
Последовательность над разнородным списком в Haskell
Рассмотрим следующее определение HList :
infixr 5 :>
data HList (types :: [*]) where
HNil :: HList '[]
(:>) :: a -> HList l -> HList (a:l)
И семейство типов Map для сопоставления списков уровней типов:
type family Map...
212 просмотров
schedule
28.06.2022
Могу ли я отфильтровать список уровней типов на основе доступности определенного класса?
Я могу отделить функции от нулевых значений с помощью такого семейства типов:
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