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

Как наложить ограничения на связанные данные?
Я хотел бы заявить, что связанные данные всегда являются экземпляром определенного класса. class (Context (Associated a b)) => Class a where data Associated a :: * -> * instance Context (Associated a b) where func1 = error "func1"...
780 просмотров
schedule 05.08.2022

Избавление от предупреждения о неисчерпывающих сопоставлениях шаблонов при ограничении GADT семействами типов
Учитывая следующую программу: {-# LANGUAGE DataKinds, GADTs #-} {-# LANGUAGE TypeFamilies #-} data Foo = A | B type family IsA (foo :: Foo) :: Bool type instance IsA A = True type instance IsA B = False data Bar (foo :: Foo) where BarA ::...
757 просмотров

Соответствие на уровне типа Nat в GHC 7.6
Мой вопрос, наверное, проще всего объяснить на примере: type family Take (n :: Nat) (xs :: [k]) :: [k] type instance Take 0 xs = '[] type instance Take (n+1) (x ': xs) = x ': Take n xs Однако второй экземпляр здесь отклоняется,...
826 просмотров

Возможны ли доказательства экземпляров семейства типов?
Во-первых, я начал с некоторых типичных натуральных чисел на уровне типов. {-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} data Nat = Z | S Nat type family Plus (n :: Nat) (m ::...
303 просмотров

примеры использования семейства данных
Преимущества использования семейств типов synonym очевидны — это функции уровня типа. Но это не относится к семействам data , поэтому мой вопрос: каковы варианты использования для семейств данных? Где мне его использовать?
1361 просмотров
schedule 07.11.2022

применение списка строк к произвольной функции
Я пытаюсь написать функцию, которая позволяет вам «применить» список строк к произвольной функции. Вот что у меня есть: {-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, OverlappingInstances, TypeFamilies #-} class Apply a c where apply...
83 просмотров
schedule 02.07.2023

Взаимозависимые имплициты и их использование с семействами типов
Я пытаюсь создать имитацию семейства типов для использования в шаблоне, где экземпляр класса типов зависит от тип разрешен другим экземпляром класса типов, который представлен в следующем блоке: ( implicit someTypeResolver: SomeTypeResolver[ a...
448 просмотров
schedule 12.02.2023

Типовой семейный полиморфизм
Итак, у меня есть функция apply :: proxy tf -> tf Int -> tf Int , которая принимает прокси, предназначенный для передачи семейства типов, и применяет Int к этому семейству типов, чтобы определить тип второго аргумента и возвращаемого значения....
258 просмотров
schedule 29.03.2023

Преобразовать список уровня типа '[a, b, c,] в функцию a- ›b-› c- ›
У меня есть семейство данных, проиндексированное списком на уровне типов, где типы в списке соответствуют параметрам экземпляра данных. Я хочу написать функцию, которая будет иметь разную арность и параметры в зависимости от экземпляра данных, чтобы...
162 просмотров

Обобщающие параметры класса
Допустим, у меня есть класс: class C a b t where f :: (a, b) -> (t a, t b) Теперь с этим определением я могу определить экземпляры, скажем: (a,b) -> (Maybe a, Maybe b) (a,b) -> ([a], [b]) Но не для (насколько я понимаю):...
87 просмотров
schedule 07.12.2022

Параметр форсирования семейства типов должен иметь вид *
Этот простой код не компилируется import Data.Kind type family F (k :: Type) :: (t :: k) -> Type Сообщение об ошибке • Expected a type, but ‘t’ has kind ‘k’ • In the kind ‘(t :: k) -> Type’ В каком-то смысле я понимаю, что это...
71 просмотров
schedule 24.10.2023

Связанные семейства данных и перекрывающиеся экземпляры
Мне нужна «общая» структура данных карты, которую можно было бы эффективно специализировать, предоставляя пользовательские экземпляры, как в раздел руководства GHC по семействам типов . {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE...
202 просмотров

Не удалось разрешить экземпляр типа Haskell
Я пытаюсь создать структуру Cofree с помощью анаморфизма, согласно этот пост . Но компилятор жалуется на несоответствие типов: Expected type: Base (Cofree Term E) (E, Fix Term) Actual type: CofreeF Term E (E, Fix Term) Но в исходном...
89 просмотров

Как извлечь информацию о типе из прокси в семействе типов для GADT?
У меня есть следующий фрагмент: {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeInType #-} import Data.Proxy data Foo where FooInt :: Foo FooProxy :: IsEnum e ~ True => Proxy e -> Foo...
312 просмотров
schedule 18.07.2022

Выражение бесконечных видов
При выражении бесконечных типов в Haskell: f x = x x -- This doesn't type check Для этого можно использовать newtype : newtype Inf = Inf { runInf :: Inf -> * } f x = x (Inf x) Существует ли newtype эквивалент для видов,...
162 просмотров
schedule 18.02.2023

Когда вычисления на уровне типов происходят с семействами типов?
Я пытаюсь составить интуитивное представление о том, когда (и сколько раз) вычисления на уровне типов с семействами типов «происходят» в Haskell. В качестве конкретного примера рассмотрим этот класс типов для индексации в n-арный продукт с...
190 просмотров

Экземпляр семейства полиморфных типов в Haskell
Я пытаюсь написать код для имитации случайных переменных и хочу, чтобы все было максимально полиморфно. Это может включать использование семейств шрифтов, которые для меня совершенно новые. Вот упрощенная версия моего кода: {-# LANGUAGE...
223 просмотров
schedule 14.03.2023

DeriveAnyClass против пустого экземпляра
Предположим, что у меня есть это семейство типов, которое выдает ошибку настраиваемого типа во время компиляции, если переданный ему тип не является записью: type family IsRecord (a :: Type) where ... Теперь у меня есть этот класс типа,...
1587 просмотров

Количественное равенство типов связанных семейств типов
У меня есть связанное семейство типов Bar в классе типов Foo . Foo' требует Bar f ~ Bar (f a) для всех a , но в другой функции test получаю ошибку Couldn't match type 'Bar f' with 'Bar (f a)' , хотя она зависит от Foo' f . Код: {-#...
50 просмотров

Почему синоним связанного типа не подразумевает ограничение
Почему использование синонима связанного типа в подписи не подразумевает соответствующее ограничение? Например. почему не компилируется следующее: {-# LANGUAGE TypeApplications, ScopedTypeVariables, TypeFamilies, AllowAmbiguousTypes #-} class...
52 просмотров
schedule 13.07.2022