Описание тега constraint-kinds

Используйте этот тег, чтобы задать вопрос, связанный с расширением Constraint Kind и / или ConstraintKinds GHC.
1 ответ

Сокращение удовлетворенных ограничений для обычных типов

Я понимаю, что следующее семейство типов не должно и, возможно, не может быть реализовано в GHC: type family MatchesConstraint c a :: Bool where MatchesConstraint c a is True if (c a) MatchesConstraint c a is False otherwise Это проблематично, потом…
06 май '18 в 13:47
3 ответа

Ограниченный гетерогенный список

Я искал Hackage и не мог найти ничего подобного, но это кажется довольно простым и полезным. Есть ли библиотека, которая содержит тип данных? data HList c where (:-) :: c a => a -> HList c Nil :: HList c Все найденные мной списки HL могут имет…
12 сен '17 в 01:27
1 ответ

GHC завис из-за UndecidableSuperClasses - ожидаемое поведение или ошибка?

Следующий фрагмент кода приводит к зависанию GHC (проверено с помощью 8.6.2 и 8.4.4) во время компиляции: {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE UndecidableSuperClasses #-} …
1 ответ

Списки типов с ограничениями

Я пытаюсь создать список на уровне типов, но у меня возникают некоторые затруднения с выяснением того, как применять ограничения. Мой базовый код: data Foo z q = Foo1 (z q) | Foo2 (z q) class Qux q -- where ... class Baz z -- where ... class Bar a w…
2 ответа

Типизируемый экземпляр для корреляции ограничений

Я пытаюсь вывести Typeable экземпляр для связанных ограничений. Смотрите следующий код: {-# LANGUAGE ConstraintKinds, GADTs #-} {-# LANGUAGE DataKinds, PolyKinds, AutoDeriveTypeable #-} {-# LANGUAGE StandaloneDeriving, DeriveDataTypeable #-} import …
17 сен '14 в 14:19
1 ответ

Когда GHC может определить переменные ограничения?

Я получаю ошибки вывода типа, потому что GHC не выведет переменную ограничения. Это выглядит выводимым за счет объединения первого порядка. В ходе дальнейшего исследования я обнаружил, что вставка привязок позволяет изменить поведение вывода типов. …
28 май '14 в 17:35
1 ответ

Есть ли библиотека, которая использует ConstraintKinds для обобщения всех классов базовых типов, чтобы разрешить ограничения?

Мы можем использовать расширение ConstraintKinds, чтобы расширить функциональность классов базового типа, чтобы разрешить ограничения. Например, мы можем сделать неупакованный вектор функтором: class Functor f where type FunctorConstraint f x :: Con…
02 окт '12 в 19:57
1 ответ

Использование видов ограничений и семейств типов с "ограниченными" ограничениями

Я работаю над аппликативным функтором, который содержит моноид для "просмотра" выполнения. Тем не менее, иногда я вообще не забочусь об этой части, поэтому выбор моноида не имеет значения, так как он никогда не будет потребляться. Я упростил то, что…
04 янв '13 в 13:27
2 ответа

ConstraintKinds объяснил на супер простом примере

Что такое тип ограничения? Зачем кому-то использовать это (на практике)? Для чего это? Не могли бы вы привести простой пример кода, чтобы проиллюстрировать ответы на два предыдущих вопроса? Почему это используется в этом коде, например?
09 июл '15 в 12:13
3 ответа

Когда (если вообще) можно ли частично применять синонимы типа?

Видимо, немного рассеянно, я написал что-то вроде следующего: {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE TypeFamilies #-} class Foo f where type Bar f :: * retbar :: Bar f -> IO f type Baz f = (Foo f, Eq f) -- WithBar :: * -> (*->Constra…
1 ответ

Где определяется вид ограничения?

Я не знаком с внутренностями GHC, но у меня есть пара вопросов о ConstraintKinds. Это говорит от GHC.Exts тот data Constraint :: BOX что вводит в заблуждение, потому что Constraint это своего рода BOX, Это подводит нас к первому вопросу: мы можем им…
10 апр '15 в 14:45
4 ответа

() как пустое ограничение

Как можно представить пустое ограничение? для следующего файла {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE KindSignatures #-} import Data.Kind(Type, Constraint) type Empty = (() :: Type -> Constraint) main :: IO () main = return () GHC 8.2.2 от…
09 май '18 в 20:38
1 ответ

HList с DataKinds, вид не продвигается

У меня есть этот фрагмент кода, который использует множество расширений GHC: {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators …
1 ответ

Есть ли стандартная реализация "тривиального ограничения" или "класса объекта"?

Я хочу просто class Trivial t instance Trivial t Это, конечно, бесполезно в Haskell 98, так как вы можете просто опустить ограничение; но с ConstraintKinds мы можем иметь явно необходимые аргументы вида * -> Constraint, В идеале я хотел бы просто…
06 фев '14 в 14:00
1 ответ

Получение в качестве аргумента функций с ограниченными экзистенциалами в Haskell

Я играл с некоторыми расширениями GHC, чтобы определить функцию, которая может делать следующее: let a = A :: A -- Show A b = B :: B -- Show B in myFunc show a b -- This should return (String, String) myFunc должен быть полностью полиморфным в подпи…
22 сен '16 в 07:20
1 ответ

Пересмотр полиморфных STUArrays с типами ограничений

Я хочу реализовать алгоритм динамического программирования полиморфный в типе счета; Вот упрощенная 1D версия без граничных условий: {-# LANGUAGE ConstraintKinds, FlexibleContexts, RankNTypes, ScopedTypeVariables #-} import Control.Monad import Cont…
09 мар '13 в 14:37
1 ответ

Допустимые типы в функциях Numeric.AD

Я с небольшим успехом оборачиваюсь вокруг основного водопровода типов, вовлеченных в ad пакет. Например, следующее прекрасно работает: import Numeric.AD ex :: Num a => [a] -> a ex [x, y] = x + 2*y > grad ex [1.0, 1.0] [1.0, 2.0] где grad им…
2 ответа

Докажите, что ограничение для компонента продукта выполняется из того факта, что оно выполняется для продукта

У меня есть класс C с экземплярами для одного типа и для кортежей. class C a instance C Int instance (C a, C b) => C (a, b) Используя нормальный Dict ГАДТ для захвата ограничений {-# LANGUAGE GADTs #-} {-# LANGUAGE ConstraintKinds #-} data Dict c…
09 янв '15 в 02:33
1 ответ

Виды ограничений Haskell - ограничение по умолчанию для реализации по умолчанию

Заголовок: я хотел бы предоставить реализацию по умолчанию для метода класса, параметризованного над ограничением, который использует экземпляр по умолчанию для этого ограничения. Учтите следующее: {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE TypeF…
28 июл '14 в 14:32
2 ответа

Что такое ограничение в натуральной подписи

Если я проверю kind из Maybe Я получаю это: λ> :k Maybe Maybe :: * -> * Теперь, если я проверю вид Monad Я получаю это: λ> :k Monad Monad :: (* -> *) -> Constraint Что такое Constraint там и зачем это нужно? Почему не только это * -&g…
08 апр '15 в 08:37