Описание тега type-families

Семейства типов представляют собой расширение языка Haskell для облегчения программирования на уровне типов посредством специальной перегрузки * типов данных *. Они являются эквивалентом данных классов типов (которые допускают перегрузку функций).
2 ответа

Получение экземпляров для данных более высокого класса

Этот вопрос основан на шаблоне данных с более высоким родом, описанном в этом блоге "Разумно-Полиморфный". В следующем блоке кода я определяю семейство типов HKD и тип данных Personгде поля могут быть либо Maybe или же Identity, {-# LANGUAGE DeriveG…
02 апр '18 в 20:55
1 ответ

Можно ли ввести дополнительные переменные типа в ограничение суперкласса?

При работе с семействами типов часто удобно использовать ограничения равенства, чтобы избежать необходимости повторять имя какой-либо функции типа в сигнатуре: class Foo f where type BulkyAssociatedType f :: * foo :: BulkyAssociatedType f -> f ..…
1 ответ

Ограничивающие случаи

Допустим, у нас есть следующее: {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeFamilyDependencies #-} type family CategoryLikeT p_a_b = t | t -> p_a_b type IsCategoryLike p t a b…
16 авг '16 в 06:10
2 ответа

Сопоставление зависимого типа со списком типов

Я думаю, что мой вопрос довольно прост для понимания из простого кода, но, с другой стороны, я не уверен в ответе! Интуитивно понятно, что я хочу дать список типов [*] и некоторый зависимый тип Foo, сгенерировать тип [Foo *]. То есть я хочу "отобраз…
01 апр '14 в 14:26
1 ответ

Ограничивающие типы в конструкторе GADT

У меня простой ADT data Concept a = Entity a | Role a | Relation a | Resource a | Sub (Concept a) Теперь я хочу создать GADT, используя этот ADT, который будет ограничивать сигнатуру типа его конструкторов. Этот код не будет работать, но я хочу сдел…
1 ответ

Работа с доказательствами с участием CmpNat и синглетонов в Haskell

Я пытаюсь создать некоторые функции для работы со следующим типом. В следующем коде используются библиотеки синглетонов и ограничений на GHC-8.4.1: {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LAN…
1 ответ

Можно ли написать 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) a) возможно ли каким-то …
14 янв '15 в 06:03
1 ответ

Типы семейства Haskell, понимание сообщения об ошибке

При попытке использовать Data.Has Я писал код, подобный следующему: data Name = Name; type instance TypeOf Name = Text type NameRecord = FieldOf Name; Я обнаружил: instance I NameRecord where ... Выдает ошибку компиляции, а именно: Приложение семейс…
07 май '12 в 07:33
0 ответов

Получите тип данных записи без шаблона haskell

Итак, я немного поигрался с GHC.Generics, которые великолепны, но кажутся ограниченными / сосредоточены в основном на генерации экземпляров. Что я хотел бы сделать, если это возможно, это получить новый тип данных из другого. Допустим, у вас есть сл…
1 ответ

Семейства типов не могут возвращать тип RankN - обходные пути или альтернативы?

Я играю с расширяемой библиотекой записей и хочу написать функцию field который может работать как Lens или Traversal в зависимости от того, Symbol Ключ находится в списке ключей. Типовое семейство дается: type family LensOrTraversal key keys s t a …
03 май '17 в 21:47
1 ответ

ghc-mod ожидает, что MonadBaseControl будет иметь связанный с StM новый тип вместо связанного с StT

Я получаю эту ошибку при установке последней версии ghc-mod (5.2.1.1) из Hackage в песочницу: [15 of 38] Compiling Language.Haskell.GhcMod.CabalConfig ( Language/Haskell/GhcMod/CabalConfig.hs, dist/dist-sandbox-94286619/build/Language/Haskell/GhcMod…
1 ответ

Семейства типов вызывают неоднозначную ошибку переменной

Случай использования: я пишу игру в интерфейсе ghcjs и бэкэнде, которые используют по существу одно и то же состояние, чтобы я мог кодировать правила игры с обеих сторон и связываться с изменениями состояния. Для этого игровое состояние будет выгляд…
28 мар '16 в 18:37
1 ответ

Упростить сигнатуры типов при использовании семейств типов?

Я переписываю некоторые из моих библиотек, чтобы использовать семейства типов вместо функциональных зависимостей. Однако, похоже, что некоторые из ограничений, которые я должен добавить к функциям, чтобы заставить их компилироваться, не должны быть …
04 мар '13 в 12:15
2 ответа

Проблемы с EDSL, связанные с реализацией подписки на массив в Haskell

контекст Я пытаюсь реализовать EDSL, который очень напоминает OLP IBM (язык моделирования для линейного программирования). Код Haskell EDSL Code {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleIns…
2 ответа

Функциональные зависимости против семейства типов

Я разрабатываю среду для проведения экспериментов с искусственной жизнью и пытаюсь использовать семейства типов вместо функциональных зависимостей. Семейства типов являются предпочтительным подходом среди Haskellers, но я столкнулся с ситуацией, ког…
0 ответов

Автоматическая компоновка типов и создание классов

Я занимаюсь разработкой библиотеки, в которой представлено потенциально большое количество потребителей, производителей и эффектов (из Pipes). Они используют ReaderT r ... как внутреннюю монаду. Каждый компонент налагает некоторое ограничение класса…
27 авг '14 в 08:28
1 ответ

Как применить индуктивное мышление к `GHC.TypeLits.Nat`?

Рассмотрим это определение zip для обычной длины векторов, индексируемых цифрами Пеано: {-# language DataKinds #-} {-# language KindSignatures #-} {-# language GADTs #-} {-# language TypeOperators #-} {-# language StandaloneDeriving #-} {-# language…
19 авг '18 в 12:11
2 ответа

Автоматический вывод Data.Vector.Unbox с синонимами связанных типов

У меня есть тип данных newtype Zq q = Zq (IntType q) где 'q' будет экземпляром класса class Foo a where type IntType a и "IntType" - это просто базовое представление (то есть Int, Integral и т. д.), связанное с "q". Я хочу сделать Zq экземпляром Dat…
2 ответа

Как мне упростить эту функцию уровня типа, которая сравнивает символы?

У меня есть код, где мне нужна функция уровня типа, которая берет два списка пар ключ-значение, которые отсортированы по ключам и имеет каждый ключ только один раз, а затем объединяет их в один такой список (предпочитая первый список, если ключи сущ…
17 май '17 в 12:56
2 ответа

Haskell: определения экземпляров для семейств типов

Допустим, у нас есть следующий код: class C t where g :: t instance C Int where g = 42 Просто. Мы также можем определить функции на Int, например, так: f1 :: Int -> Int f1 x = x * x Я работал с семействами типов, в частности, потому что Data.Has …
08 май '12 в 01:55