Описание тега deriving

В Haskell производный экземпляр - это объявление экземпляра, которое создается автоматически вместе с объявлением данных или нового типа. Тело объявления производного экземпляра синтаксически выводится из определения связанного типа.
1 ответ

Haskell: получение Show для типов Fix

Я пытаюсь реализовать рекурсивный тип данных, используя recursion-schemes, Я хотел бы иметь возможность распечатать его. import Data.Functor.Foldable data T1F a = Foo deriving Show type T1 = Fix T1F data T2 = Bar T1 deriving Show -- error here Сообщ…
21 мар '17 в 18:36
0 ответов

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

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

Почему этому новому типу не дают правильный экземпляр Read?

Я создал newtype псевдоним IP введите от Data.IP: {-# LANGUAGE GeneralizedNewtypeDeriving #-} module IPAddress (IPAddress) where import Data.IP (IP) import Database.PostgreSQL.Simple.ToField newtype IPAddress = IPAddress IP deriving (Read, Show) ins…
03 апр '17 в 01:59
2 ответа

Написание правильного пользовательского экземпляра для чтения

Привет товарищи Хаскеллерс, Я изучаю Haskell с одного месяца и изо всех сил пытаюсь создать пользовательский экземпляр для чтения для личного типа данных. Я следовал этому и соответствующей главе в Learn Yourself a Haskell, вот мой фрагмент кода. da…
23 апр '17 в 11:34
1 ответ

Можно ли сделать инфикс-конструктор данных haskell GADT в производном Show?

Рассмотрим два data декларации: {-# LANGUAGE GADTs #-} data X = Int `Y` Int deriving Show data Z where W :: Int -> Int -> Z deriving Show main = do print (1 `Y` 2) print (3 `W` 4) Запуск вышеуказанной программы производит: 1 `Y` 2 W 3 4 поэтом…
23 июн '17 в 20:08
2 ответа

Получение данных. Комплекс в Хаскеле

У меня есть код, который выглядит примерно так: import Data.Complex data Foo = N Number | C ComplexNum data Number = Int Integer | Real Float | Rational Rational deriving Show data ComplexNum = con1 (Complex Integer) | con2 (Complex Float) | con3 (C…
26 янв '14 в 04:48
2 ответа

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

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

Новый тип, производный IsSequence

У меня новый тип X, который в основном список Ints. Я использую ClassyPrelude вместо стандартной Prelude и хочу получить класс IsSequence. Это делает необходимым также выводить множество других классов. Расширение языка GeneralizedNewtypeDeriving до…
11 апр '18 в 13:51
1 ответ

Получение экземпляров по умолчанию с использованием GHC.Generics

У меня есть класс типов Cyclic для которого я хотел бы иметь возможность предоставить общие экземпляры. class Cyclic g where gen :: g rot :: g -> g ord :: g -> Int Учитывая тип суммы нулевых конструкторов, data T3 = A | B | C deriving (Generic…
2 ответа

Почему Либо получает Шоу, а может и нет?

Документация обоих Either а также Maybe указывают, что у них есть случаи Show, Either определяется как производный Show просто: data Either a b = Left a | Right b deriving (Eq, Ord, Read, Show, Typeable) Еще, Maybe не: data Maybe a = Nothing | Just …
07 янв '15 в 22:10
1 ответ

Деривация экземпляра Typeable с контекстом

Я пишу набор функций для работы с HTTP-запросами и мне нужно создать набор исключений для обработки сбоев. Вот data HStream ty => ErrorResponse ty = ErrorResponse (Response ty) data HStream ty => HttpException ty = WrongURIException String | C…
16 апр '14 в 11:23
0 ответов

Автоматически получить Unbox для нового типа без TH

Итак, у меня есть довольно простой новый тип: newtype SomeID = SomeID Word64 deriving (Show,Eq) И я хотел бы использовать этот тип в распакованном векторе, но при первом осмотре это кажется более сложным, чем вывод... скажем... Storable, И когда я г…
1 ответ

Как вывести std::vector?

Я хочу класс, полученный из std::vector для моего оператора [] template<class T> class MyVector : public std::vector<T> { public: // ?... const T &operator[](size_t index) const { //... } T &operator[](size_t index) { //... } }; …
05 июл '18 в 15:02
1 ответ

haskell - есть ли способ генерировать "производные" экземпляры для грубо-кортежно-изоморфных типов данных?

Предположим, у меня есть тип данных, как data D a = D a a a и класс типов class C c ... instance (C c1, C c2) => C (c1, c2) Затем я хочу иметь возможность написать data D a = D a a a deriving C и это генерирует экземпляр, instance C ((a, a), a) =…
11 мар '12 в 23:21
1 ответ

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

Я вижу два выражения data BinTree a = BTNil | BTNode a (BinTree a) (BinTree a) deriving Show data Day = Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday deriving (Enum) Я сбиваю с толку, когда я должен использовать скобки после п…
10 июл '18 в 22:45
1 ответ

Могу ли я считать этот вывод самым левым или / и самым правым?

Например, я хотел бы получить строку 'aabbccdd' из заданного набора продукции: S -> AB | C A -> aAb | ab B -> cBd | cd C -> aCd | aDd D -> bDc | bc Я могу вывести строку из AB, используя самый левый и самый правый вывод. Но как насчет…
19 май '16 в 11:21
3 ответа

Comonads на молнии, как правило

Для любого типа контейнера мы можем сформировать (элементно-ориентированную) молнию и знать, что эта структура является Comonad. Это было недавно подробно изучено в другом вопросе переполнения стека для следующего типа: data Bin a = Branch (Bin a) a…
28 авг '14 в 16:51
1 ответ

Как я могу получить экземпляр данных для GADT в Haskell?

У меня есть GADT, который когда-либо используется только с двумя разными параметрами, ForwardPossible и (): -- | Used when a forward definition is possible. data ForwardPossible = ForwardPossible deriving (Eq, Ord, Typeable, Data, Show) -- | GADT wh…
24 сен '12 в 22:12
1 ответ

Вывод типа и его зависимостей

Я играл с обертками нового типа для своих индексов, чтобы избежать ошибок, и у меня есть такой код: {-# LANGUAGE GeneralizedNewtypeDeriving #-} newtype PersonIdx = PersonIdx Int deriving (Enum, Eq, Integral, Num, Ord, Real, Show) Вывести Integralнуж…
18 янв '10 в 17:28
3 ответа

Есть ли шаблон Haskell / механизм получения для Data.Binary (или друзья?)

Data.Binary документация показывает написание экземпляра от руки. Это можно обойти? Я видел здесь, что есть еще одна библиотека, SerTH, которая имеет механизм получения (на основе Template Haskell), но ссылка на нее кажется неработающей. Кроме того,…
03 янв '12 в 15:39