Описание тега gadt
Обобщенные алгебраические типы данных, GADT, представляют собой более мощную форму алгебраических типов данных, которые поддерживают настраиваемые типы конструкторов.
2
ответа
Динамическое построение значений с помощью GADT с использованием типов данных
Почему сложнее построить значения с помощью типов данных, а сопоставить их с шаблонами сравнительно легко? {-# LANGUAGE KindSignatures , GADTs , DataKinds , Rank2Types #-} data Nat = Zero | Succ Nat data Direction = Center | Up | Down | UpDown deriv…
04 май '14 в 00:39
1
ответ
Почему GHC не заканчивается этим шаблоном Haskell шаблона GADT?
У меня проблема с генерацией GADT с шаблоном Haskell. Проблема в том, что я не могу заставить код полностью скомпилироваться. GHCI не завершает работу при загрузке файла, и процесс GHC использует много памяти и процессоров, насколько это возможно (2…
25 янв '13 в 15:52
1
ответ
Создание (получение) экземпляра значения из фантомного типа
Я использую GADT для создания системы базовых измерений (как в физических измерениях) для валют. Размеры (например, USD, USD/EUR, EUR/USD) представлены в виде фантомных типов. Я хотел бы иметь возможность печатать количество валюты в стиле, например…
27 июл '14 в 21:35
1
ответ
Ограничивающие типы в конструкторе GADT
У меня простой ADT data Concept a = Entity a | Role a | Relation a | Resource a | Sub (Concept a) Теперь я хочу создать GADT, используя этот ADT, который будет ограничивать сигнатуру типа его конструкторов. Этот код не будет работать, но я хочу сдел…
24 май '17 в 20:23
0
ответов
Экземпляр монады для простого языка GADT
У меня есть следующий GADT, который представляет простой язык логических и целых чисел. {-# LANGUAGE GADTs #-} module Example1 where import Control.Monad (ap) data Expr t a where Lit :: t -> Expr t a Var :: a -> Expr t a Add :: Expr Int a ->…
04 мар '16 в 20:30
2
ответа
Что ближе всего к Haskell GADT и классам типов в F#?
F# является ОД с ООП. Что ближе всего подходит к обобщенным алгебраическим типам данных и классам типов Haskell?
09 ноя '12 в 15:29
1
ответ
Использование Fold-интерпретатора на GADT
Несколько недель назад я прочитал " Написание переводчика", используя фолд. Я пытался применить этот метод к проекту, над которым я работаю, но были ошибки из-за GADT. Вот игрушечный код, который генерирует ту же проблему. {-# LANGUAGE GADTs, KindSi…
18 фев '17 в 05:33
1
ответ
Как написать Traversal для GADT?
Можно ли написать Traversal для ГАДТ? Я имею: {-# LANGUAGE TypeInType, GADTs, TypeFamilies, RankNTypes #-} module GADT where import Data.Kind data Tag = TagA | TagB data family Tagged (tag :: Tag) data Foo (tag :: Maybe Tag) where Foo :: Int -> F…
21 ноя '17 в 17:46
3
ответа
Как можно избежать нескольких реализаций функций с помощью GADT?
Прежде всего, вот минимальный пример моего кода: {-# LANGUAGE GADTs #-} -- package "url" import Network.URL (exportURL, URL(..), URLType(..)) data MyURL a where GalleryURL :: URL -> MyURL URL PictureURL :: URL -> MyURL URL url = URL { url_type…
31 авг '13 в 12:58
2
ответа
Почему конструкторы GADT/ экзистенциальных данных нельзя использовать в ленивых шаблонах?
Сегодня я получил ошибку компилятора при попытке использовать ленивый шаблон при сопоставлении с экзистенциальным конструктором GADT: Экзистенциальный или конструктор данных GADT нельзя использовать внутри ленивого (~) шаблона Почему это ограничение…
26 янв '13 в 15:15
4
ответа
Материал для изучения ГАДТ
Я начал читать о GADT в Haskell Wiki, но не совсем понял, что понимаю. Вы рекомендуете отдельную главу книги или сообщение в блоге, объясняющее GADT для начинающего на Haskell?
26 окт '10 в 00:14
1
ответ
ГАДТ - приложения и полезность?
Я рассказываю о GADT, используя learnyouahaskell, и меня интересует их возможное использование. Я понимаю, что их основной характеристикой является возможность явной установки типа. Такие как: data Users a where GetUserName :: Int -> Users String…
08 окт '16 в 09:00
1
ответ
Как бы вы абстрагировали шаблон в этой паре "похожих по форме" типов данных?
Общий вопрос У меня есть пара типов данных, которые представляют собой два разных способа представления одной и той же вещи: один записывает имя переменной в String, а другой записывает имя переменной в Int. В настоящее время они оба определены. Тем…
28 янв '14 в 00:53
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
1
ответ
Перечень ГАДЦ в Хаскеле
Не могли бы вы сказать мне, есть ли какие-либо расширения механизма получения Haskell для класса Enum? Я имею в виду, что есть много разумных ситуаций, кроме случая `` нулевых конструкторов ''. Есть ли работы на эту тему?
24 апр '13 в 17:17
1
ответ
Проблемы с рефакторингом текущих типов (возможно, связанных с GADT/Type Families)
У меня есть такие типы: -- There are codes newtype ICode = ICode { fromICode :: String } newtype RCode = RCode { fromRCode :: String } data DCode = DCode1 | DCode2 | DCode3 -- There are locations described by type and code. -- Current implementation…
29 янв '15 в 11:36
1
ответ
Haskell - соответствие шаблона GADT с ограничениями класса
Рассмотрим следующий пример {-# LANGUAGE DataKinds, GADTs #-} data Phantom = A | B data Foo (a :: Phantom) where FooA :: Foo 'A FooB :: Foo 'B class PhantomConstraint (a :: Phantom) instance PhantomConstraint 'A -- Note: No instance for 'B someFunc …
28 сен '18 в 23:59
1
ответ
Деконструкция GADT: где я теряю контекст?
У меня есть этот тип и эти функции: data Tag a where Tag :: (Show a, Eq a, Ord a, Storable a, Binary a) => a -> BL.ByteString -> Tag a getVal :: Tag a -> a getVal (Tag v _) = v isBigger :: Tag a -> Tag a -> Bool a `isBigger` b = (g…
05 сен '13 в 16:41
2
ответа
Как сопоставить образец на GADT в Bigarray?
Как мы можем сопоставить образец на GADT? В этом случае у меня проблемы с GADT Бигаррея. Более конкретно, код let print_layout v = match Bigarray.Genarray.layout v with | Bigarray.C_layout -> Printf.printf "C layout\n" | Bigarray.Fortran_layout -…
02 сен '15 в 05:17
1
ответ
Могу ли я сделать это монадой
У меня есть тип T (который, если вам интересно, является оберткой статических указателей, которые я изучал здесь), где я могу с радостью написать следующие операции для: unpointT :: T a -> a apT :: T (a -> b) -> T a -> T b bindT :: T a -…
07 апр '18 в 02:01