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

monads-tf: экземпляр MonadReader для MonadState
Рассмотрим следующий пример. У меня есть монада MyM , которая является просто StateT {-# LANGUAGE TypeFamilies #-} import Control.Monad.State import Control.Monad.Reader type MyS = Int type MyM = StateT MyS Обычно MyM используется для...
652 просмотров

Как обойти условие покрытия для функциональных зависимостей без использования -XUndecidableInstances
При использовании функциональных зависимостей я часто попадаю в Условие покрытия . Его можно поднять с помощью UndecidableInstances , но я обычно стараюсь держаться подальше от этого расширения. Вот несколько надуманный пример, который работает...
379 просмотров

Типопоточные гетерогенные списки и значения по умолчанию (?) с семействами типов?
Я работаю над библиотекой, в которой хочу определить рекурсивный класс, который я здесь упростил: {-# LANGUAGE MultiParamTypeClasses , FlexibleInstances #-} data Snoc st b c = Snoc (st b) (c -> b) data Top a = Top class StackTo a...
260 просмотров
schedule 28.08.2022

Иерархическое имя модуля для программ уровня типа
Допустим, я написал несколько уровня типов. программа на Haskell: type family NAryFn (n::Nat) (dom::*) (cod::*) :: * type instance NAryFn Ze dom cod = cod type instance NAryFn (Su n) dom cod = dom -> NAryFn n dom cod Я думаю, что это...
198 просмотров
schedule 30.12.2022

Различное поведение между числовыми литералами и параметрами функции с ограничениями в Haskell
Я пытался выяснить более тонкие части системы типов Haskell, написав библиотеку Vector. В идеале мне бы хотелось иметь перегруженную операцию умножения векторов, которая работает немного как C++, т. е. вы можете умножать вектор любого размера на...
198 просмотров
schedule 27.11.2022

Экземпляры по умолчанию для семейства данных
Я хочу использовать семейства данных для создания эффективных представлений Set для определенных типов данных. Для всех других (Ord) типов данных я хочу использовать Data.Set в качестве экземпляра. Загвоздка в том, что я не хочу явно создавать...
253 просмотров
schedule 13.04.2023

Конструктор экземпляра семейства данных экспорта
Как я могу экспортировать конструкторы экземпляров семейства данных? Я безуспешно пробовал разные способы (см. закомментированный код): module Test ( --Foo () (..) --type Foo () (..) --UnitBar ) where class Foo a where data Bar a...
607 просмотров
schedule 14.02.2023

Семьи закрытого типа не работают должным образом
Пару часов назад я собрал GHC HEAD, чтобы поэкспериментировать с новыми блестящими семействами закрытых шрифтов. {-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances #-} type family C a b where C a [a] = [a] C a a = [a]...
275 просмотров
schedule 07.07.2023

DefaultSignatures и связанные семейства типов
Есть ли способ использовать расширение DefaultSignatures со связанными семействами типов. Вот пример, зачем мне это нужно. class Foo p where type Back p :: * type Forward p :: * customFunc :: p -> IO () newtype Bar a = Bar (Forward...
421 просмотров
schedule 16.02.2024

Сопоставление зависимого типа со списком типов
Я думаю, что мой вопрос довольно прост для понимания из простого кода, но, с другой стороны, я не уверен в ответе! Интуитивно то, что я хочу сделать, это получить список типов [*] и некоторый зависимый тип Foo, сгенерировать тип [Foo *]. То есть я...
177 просмотров
schedule 13.11.2023

Uncurry для n-арных функций
У меня есть номер уровня типа data Z deriving Typeable data S n deriving Typeable и n-арные функции (код из пакета fixed-vector) -- | Type family for n-ary functions. type family Fn n a b type instance Fn Z a b = b type instance...
527 просмотров
schedule 17.06.2022

Ограничение класса типа для экземпляров семейства типов
Можно ли указать ограничение класса типа, которому должны удовлетворять все экземпляры семейства типов? Например, учитывая следующее объявление, как я могу убедиться, что все экземпляры также являются экземплярами Eq : data family Channel c ::...
1288 просмотров
schedule 21.03.2022

Неоднозначное разрешение экземпляра в Haskell
Введение и пример использования Привет! У меня проблема в Haskell. Рассмотрим следующий код class PolyMonad m1 m2 m3 | m1 m2 -> m3 where polyBind :: m1 a -> (a -> m2 b) -> m3 b который просто объявляет привязку...
458 просмотров

Инвертирование семейства типов
У меня есть семейство "линейного" типа, т.е. вида type family Foo a type instance Foo T1 = T2 type instance Foo T2 = T3 ... type instance Foo T9 = T10 В моем частном случае использования очень удобно определить "обратное" семейство FooRev ,...
225 просмотров
schedule 07.06.2022

Как я могу определить экземпляр NFData для рекурсивного одноэлементного типа?
Я использую библиотеку singletons . У меня есть этот тип данных: import Control.DeepSeq import Data.Singletons.Prelude import Data.Singletons.TH data T = A | B [T] genSingletons [''T] Я хочу, чтобы сгенерированный одноэлементный...
869 просмотров

Почему компилятор не может сопоставить тип «a==a» с «True» для семейства типов?
Есть ли причина, по которой этот код не компилируется: type family Foo a b :: Bool where Foo a b = a == b foo :: Foo a b ~ True => Proxy a -> Proxy b foo _ = Proxy bar :: Proxy a -> Proxy a bar = foo с ошибкой: Couldn't...
198 просмотров
schedule 04.03.2024

Ограничения равенства в экземплярах типов
Допустим, у меня есть следующее: type family TF a b Могу ли я написать что-то вроде этого type instance TF Int t = (t ~ (x,y)) => (Int,x,y) как возможно глупый пример. Этот вопрос соответствует той же теме, что и принятый ответ...
163 просмотров
schedule 30.05.2023

Тип данных, который можно повысить до уровня вида только с одним значением
Я понимаю, что могу повысить Bool до уровня вида вот так, где Bool потенциально может быть True или False : {-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeFamilies #-} type family TF t :: Bool type instance TF Int = True type instance TF Bool...
138 просмотров
schedule 21.07.2023

Что такое нелинейные паттерны
Я читаю статью о servant -api DSL (см. pdf здесь ) Цитата из Раздел 5.2 Безопасный ввод ссылок (выделение добавлено мной) type family ElSymbol e (s :: Symbol) a :: Bool where ElSymbol (s :> e) s a = Elem e a ElSymbol e s a = False...
2280 просмотров
schedule 12.07.2023

Как создать класс вида в Haskell или специальный полиморфизм на уровне типов с использованием семейств типов
Я изучаю особенности семейства типов Haskell и вычисление уровня типов. Кажется, довольно легко получить параметрический полиморфизм на уровне типа, используя PolyKinds : {-# LANGUAGE DataKinds, TypeFamilies, KindSignatures, GADTs,...
537 просмотров