Вопросы по теме '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 просмотров
schedule
06.06.2023
Как обойти условие покрытия для функциональных зависимостей без использования -XUndecidableInstances
При использовании функциональных зависимостей я часто попадаю в Условие покрытия . Его можно поднять с помощью UndecidableInstances , но я обычно стараюсь держаться подальше от этого расширения.
Вот несколько надуманный пример, который работает...
379 просмотров
schedule
01.12.2022
Типопоточные гетерогенные списки и значения по умолчанию (?) с семействами типов?
Я работаю над библиотекой, в которой хочу определить рекурсивный класс, который я здесь упростил:
{-# 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 просмотров
schedule
26.06.2023
Инвертирование семейства типов
У меня есть семейство "линейного" типа, т.е. вида
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 просмотров
schedule
09.11.2022
Почему компилятор не может сопоставить тип «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 просмотров
schedule
08.11.2022