Вопросы по теме '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 просмотров
schedule
17.09.2022
Соответствие на уровне типа 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 просмотров
schedule
05.07.2023
Возможны ли доказательства экземпляров семейства типов?
Во-первых, я начал с некоторых типичных натуральных чисел на уровне типов.
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
data Nat = Z | S Nat
type family Plus (n :: Nat) (m ::...
303 просмотров
schedule
26.02.2022
примеры использования семейства данных
Преимущества использования семейств типов 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 просмотров
schedule
06.04.2022
Обобщающие параметры класса
Допустим, у меня есть класс:
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 просмотров
schedule
14.06.2023
Не удалось разрешить экземпляр типа Haskell
Я пытаюсь создать структуру Cofree с помощью анаморфизма, согласно этот пост . Но компилятор жалуется на несоответствие типов:
Expected type: Base (Cofree Term E) (E, Fix Term)
Actual type: CofreeF Term E (E, Fix Term)
Но в исходном...
89 просмотров
schedule
05.10.2022
Как извлечь информацию о типе из прокси в семействе типов для 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 просмотров
schedule
03.11.2022
Экземпляр семейства полиморфных типов в Haskell
Я пытаюсь написать код для имитации случайных переменных и хочу, чтобы все было максимально полиморфно. Это может включать использование семейств шрифтов, которые для меня совершенно новые.
Вот упрощенная версия моего кода:
{-# LANGUAGE...
223 просмотров
schedule
14.03.2023
DeriveAnyClass против пустого экземпляра
Предположим, что у меня есть это семейство типов, которое выдает ошибку настраиваемого типа во время компиляции, если переданный ему тип не является записью:
type family IsRecord (a :: Type) where
...
Теперь у меня есть этот класс типа,...
1587 просмотров
schedule
24.03.2023
Количественное равенство типов связанных семейств типов
У меня есть связанное семейство типов Bar в классе типов Foo . Foo' требует Bar f ~ Bar (f a) для всех a , но в другой функции test получаю ошибку Couldn't match type 'Bar f' with 'Bar (f a)' , хотя она зависит от Foo' f . Код:
{-#...
50 просмотров
schedule
03.05.2024
Почему синоним связанного типа не подразумевает ограничение
Почему использование синонима связанного типа в подписи не подразумевает соответствующее ограничение?
Например. почему не компилируется следующее:
{-# LANGUAGE TypeApplications, ScopedTypeVariables, TypeFamilies, AllowAmbiguousTypes #-}
class...
52 просмотров
schedule
13.07.2022